6

我已经通过各种社交登录提供商(Facebook、Twitter、Google)将Satellizer整合到我的应用程序中。我的堆栈包括:AngularJS(UI 路由器)和 NodeJS/Express。

我似乎在为用户身份验证设置动态回调 URL 时遇到了挑战。我的应用程序没有一致的登录 URL,例如http://example.com/login因为我的所有 URL 都是动态的和基于令牌的,例如:http://example.com/XH12aT1771. 实际上,我的登录用户体验是一种模式叠加,没有任何一致的登录页面。

我的系统与 OAuth 集成的挑战是在用户通过模态覆盖登录到我的应用程序后,我想将它们放回他们所在的确切房间(或令牌)中,而不是将它们重定向到某个回调 URL 页面这将是一个糟糕的用户体验。

是使我的 OAuth 回调 url 硬编码的唯一方法,例如:http://example.com/success然后在用户点击/success页面后将用户重定向回他们的令牌?这真的是做这种事情的唯一方法吗?

如果您需要更多问题详细信息,请告诉我,谢谢您的帮助。

4

4 回答 4

1

我不知道 Sattelizer 为您提供的选项,它还取决于授权服务器 (AS) 支持的选项,但是:

从安全角度来看,无论如何都建议使用固定的回调 URL,以防止由于 AS 端的损坏/草率 URL 匹配或由于嵌入的 RP 端意外令牌泄漏给第三方而可能发生的一些攻击不使用令牌等的页面上的图像/iframes。

因此,无论是否有其他方法,无论如何使用固定回调 URL 都是一种很好的安全实践,您可以(希望)将原始 URL 与发送出去的状态参数相关联,或者将其放入 cookie 并在使用后恢复它回调 URL 上的令牌。

于 2014-11-19T20:09:42.620 回答
1

我对Satelizer不熟悉,但看了一小会,似乎有可能在登录后配置回调url。

// Google
$authProvider.google({
  url: '/auth/google',
  authorizationEndpoint: 'https://accounts.google.com/o/oauth2/auth',
  redirectUri: window.location.origin || window.location.protocol + '//' + window.location.host,
  scope: ['profile', 'email'];
  scopePrefix: 'openid';
  scopeDelimiter: ' ',
  requiredUrlParams: ['scope'],
  optionalUrlParams: ['display'],
  display: 'popup',
  type: '2.0',
  popupOptions: { width: 452, height: 633 }
});

在这里,他们将重定向 uri 直接配置到用户当前所在的位置。请参阅卫星发射器配置

这不是你要找的东西吗?

于 2014-11-21T17:39:59.447 回答
1

我对 Satellizer 不熟悉,但我已经构建了一个基于动态 url 的 oauth 回调结构。

$callback_url = Configure::read('Your.base') . 'connect/provider/signin/' . $invite_code;

我们 oAuth 关闭一个唯一的 URL,它将某人放在一个特定的房间里。

于 2014-11-20T23:26:30.507 回答
0

似乎答案应该是 kfis 所说的或者 -

$authProvider.loginRedirect = '/'; // Change this relative path

每 -卫星发射器

于 2014-11-24T23:59:02.800 回答