AngularJS ui-路由器与 OAuth2 冲突 access_token
AngularJS ui-router clashes with OAuth2 access_token
我有一个用 AngularJS 开发的前端和 ui-router。要从后端使用 REST API,我需要获取 OAuth2 访问令牌(隐式授权)。
我的问题出在 OAuth 舞蹈的最后一步,当我在 url
中从身份验证服务器取回访问令牌时
mydomain.com/home/#access_token=hdzjkdnba89fenbjkéz38U0D903ç&...
mydomain.com/home
显然是重定向 URI。
重定向后几分之一秒,AngularJS 将 URL 更改为
mydomain.com/#/my-default-view
因此访问令牌从 URL.
中删除
现在有几件事:
- 不允许我为我的 OAuth2 客户端定义包含散列 ('#') 的重定向 URI。因此
mydomain.com/#/auth-complete/
这样的东西 不会 可以。
- 我用
$routeProvider.otherwise('/')
.
- 我尝试设置
$locationProvider.html5Mode(true);
以删除中间的“#”,但问题是一样的(URL 和访问令牌在重定向后立即被删除)。
- 因为即使 URL 被 Angular 修改后,访问令牌仍然可以在 HTTP 响应中访问,我可能会使用
$http
拦截器,但这听起来有点过分对于这项常见任务来说,不是吗?
有什么建议吗?
这个对我有用 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
}
})
我不再使用 ui-router
但对于那些仍然需要解决方法的人来说,您只需要在正则表达式中捕获令牌。从 the documentation 开始,您可以执行类似
的操作
.state('oauth.token', {
url: "/o/#{authToken:[0-9a-zA-Z]+}",
...
})
并在 authToken
中获取您的访问令牌。
我有一个用 AngularJS 开发的前端和 ui-router。要从后端使用 REST API,我需要获取 OAuth2 访问令牌(隐式授权)。
我的问题出在 OAuth 舞蹈的最后一步,当我在 url
中从身份验证服务器取回访问令牌时mydomain.com/home/#access_token=hdzjkdnba89fenbjkéz38U0D903ç&...
mydomain.com/home
显然是重定向 URI。
重定向后几分之一秒,AngularJS 将 URL 更改为
mydomain.com/#/my-default-view
因此访问令牌从 URL.
中删除现在有几件事:
- 不允许我为我的 OAuth2 客户端定义包含散列 ('#') 的重定向 URI。因此
mydomain.com/#/auth-complete/
这样的东西 不会 可以。 - 我用
$routeProvider.otherwise('/')
. - 我尝试设置
$locationProvider.html5Mode(true);
以删除中间的“#”,但问题是一样的(URL 和访问令牌在重定向后立即被删除)。 - 因为即使 URL 被 Angular 修改后,访问令牌仍然可以在 HTTP 响应中访问,我可能会使用
$http
拦截器,但这听起来有点过分对于这项常见任务来说,不是吗?
有什么建议吗?
这个对我有用 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
}
})
我不再使用 ui-router
但对于那些仍然需要解决方法的人来说,您只需要在正则表达式中捕获令牌。从 the documentation 开始,您可以执行类似
.state('oauth.token', {
url: "/o/#{authToken:[0-9a-zA-Z]+}",
...
})
并在 authToken
中获取您的访问令牌。