2014-11-03 110 views
6

我已将Satellizer与各种社交登录提供程序(Facebook,Twitter和Google)合并到我的应用程序中。我的堆栈包括:AngularJS(UI路由器)和NodeJS/Express。OAuth:如何设置动态回调URL?

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

我的系统与OAuth集成的挑战在于,通过模式叠加将用户登录到我的应用后,我想将它们放回到它们所在的确切房间(或标记)中,而不是将它们重定向到某些回调URL页面,因为这将是一个糟糕的用户体验。

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

让我知道如果您需要更多的问题的详细信息,感谢您的帮助。

+0

我已经使用了第三方的OAuth 2对于某些应用程序,但从来没有发现需要创建静态回调网址。它应该只匹配基础网址(即http:// example。),并且不应该在此后写什么。 – Kop4lyf 2014-11-20 09:54:09

+0

您是否尝试将其设置为http:// localhost? – DaImTo 2014-11-24 14:08:27

+1

回调URL通常是硬编码到特定路径。也许你可以尝试让他们击中你的令牌路线,然后将他们重新路由到回叫网址?我坚持在我的node.js应用程序http://passportjs.org/所以不知道什么是可能的。 – cchamberlain 2014-11-25 00:02:07

回答

1

我不知道这Sattelizer给你的选项,这也将取决于授权服务器(AS)支持的选项,但是:

从安全角度来看,建议使用固定回调URL,以防止由于AS端破碎/马虎的URL匹配而可能发生的一些攻击,或者由于未使用令牌的页面上的嵌入式图像/ iframe导致RP端第三方意外泄漏令牌等等。

因此,无论是否有其他方法,无论如何都要使用固定回调URL并且您可以(希望)将原点关联起来带有状态参数的URL,该参数被发送出去或放入cookie中,并在消费回调URL上的标记后恢复它。

1

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

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

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

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

这不是你要找的东西吗?

0

好像答案应该是什么kfis说还是 -

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

每 - Satellizer