AngularJS ui-router与OAuth2 access_token冲突

Bud*_*hot 6 oauth angularjs

我有一个使用ui-router在AngularJS中开发的前端.消费从后端我需要得到OAuth2用户访问令牌(隐补助金)的REST API.

我的问题就出在OAuth舞蹈的最后一步,当我得到了从接入认证服务器令牌回到网址

mydomain.com/home/#access_token=hdzjkdnba89fenbjkéz38U0D903ç&...
Run Code Online (Sandbox Code Playgroud)

mydomain.com/home 显然是重定向URI.

重定向后只需几分之一秒,AngularJS会更改URL

mydomain.com/#/my-default-view
Run Code Online (Sandbox Code Playgroud)

因此,访问令牌从URL中删除.

现在有几件事:

  • 我不允许定义包含哈希("#")重定向URI我OAuth2用户端.因此,像mydomain.com/#/auth-complete/不会好起来的.
  • 我用$routeProvider.otherwise('/').
  • 我试图设置$locationProvider.html5Mode(true);中间删除'#',但问题是相同的(重定向后URL和访问令牌立即被删除).
  • 由于即使在Angular修改了URL后,仍然可以在HTTP响应中访问访问令牌,我可能会使用一个$http拦截器,但这对于这个常见任务听起来有点太多了不是吗?

有什么建议?

小智 5

这个适用于Google,作为客户端应用程序的OAuth2提供程序:

$urlRouterProvider.otherwise('/');

$stateProvider.state('access_token', {
    url: '/access_token={accessToken}&token_type={tokenType}&expires_in={expiresIn}',
    template: '',
    controller: function($stateParams) {
        var token = $stateParams.accessToken;
        // do something usefull with token
    }
})
Run Code Online (Sandbox Code Playgroud)


Bud*_*hot 0

我不再使用ui-router,但对于那些仍然需要解决方法的人来说,您只需在正则表达式中捕获令牌即可。从文档中,您可以执行类似的操作

.state('oauth.token', {
        url: "/o/#{authToken:[0-9a-zA-Z]+}",
        ...
 })
Run Code Online (Sandbox Code Playgroud)

并获取您的访问令牌authToken