【问题标题】:OAuth: how to set dynamic callback URL?OAuth:如何设置动态回调 URL?
【发布时间】:2014-12-29 15:06:39
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我在某些应用程序中使用了 3rd 方 oauth 2,但从未发现需要创建静态回调 url。它应该只匹配基本 url(即example.com)并且不应该关心之后写的内容。
  • 您是否尝试将其设置为localhost?
  • 回调 URL 通常被硬编码到特定路径。也许您可以尝试让他们点击您的令牌路由,然后将它们重新路由到回调 URL?我在我的 node.js 应用程序中坚持使用passportjs.org,所以不确定有什么可能。

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    这不是你要找的东西吗?

    【讨论】:

      【解决方案3】:

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

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

      我们对一个唯一的 URL 进行 oAuth,这会将某人放在特定的房间中。

      【讨论】:

        【解决方案4】:

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

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

        每 - Satellizer

        【讨论】:

          猜你喜欢
          • 2013-04-24
          • 2012-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多