OAuth:如何设置动态回调网址?

时间:2014-11-03 00:22:35

标签: angularjs oauth oauth-2.0 angular-ui-router satellizer

我已将Satellizer合并到我的应用中,其中包含各种社交登录提供商(Facebook,Twitter,Google)。我的堆栈包括:AngularJS(UI路由器)和NodeJS / Express。

我似乎遇到了为用户身份验证设置动态回调网址的挑战。我的应用没有具有一致的登录网址,例如http://example.com/login,因为我的所有网址都是动态且基于令牌的,例如:http://example.com/XH12aT1771。实际上,我的登录用户体验是模态覆盖,并且没有任何一致的登录页面。

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

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

如果您需要更多问题详情,请与我们联系,谢谢您的帮助。

4 个答案:

答案 0 :(得分:1)

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

从安全角度来看,建议使用固定的回调URL,以防止由于AS端的URL错误匹配或者RP侧的第三方意外令牌泄漏而可能发生的某些攻击因为在不使用令牌等的页面上嵌入了图像/ iframe。

因此无论是否有另一种方式,无论如何都使用固定的回调URL是一种很好的安全措施,你可以(希望)将原始URL与发送或放入的状态参数相关联。一个cookie并在使用回调URL上的令牌后恢复它。

答案 1 :(得分:1)

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

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

我们关闭一个唯一的网址,将某人放入特定的房间。

答案 2 :(得分:1)

我不熟悉Satelizer,但经过简短的阅读后,似乎有可能在登录后配置回调网址。

// 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直接配置到用户当前所在的位置。 见Satelizer Configuration

这不是你要找的东西吗?

答案 3 :(得分:0)

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

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

per - Satellizer