使用HashLocationStrategy使用Angular路由处理OAuth2隐式重定向

时间:2018-12-21 23:14:42

标签: angular oauth-2.0 hash-location-strategy

我正在SPA上启用OAuth2,如下所示:

  • 隐式授予类型是唯一受支持的授予类型
  • 我的Angular 5应用程序使用HashLocationStrategy进行路由

我无法更改这两个约束。

当我登录到我的应用并进行重定向时,来自授权端点的重定向URL如下所示:

http://foo/#access_token=(ey...)&token_type=bearer&state=(state...)&expires_in=43199&jti=(jti...)

这是根据OAuth2规范所预期的;重定向网址中存在的参数必须作为片段附加(在“#”之后)。

我遇到的问题是Angular会根据其哈希位置策略来解释哈希之后的字符。它正在尝试重定向到不存在的路径access_token=...

我该如何解决?

1 个答案:

答案 0 :(得分:1)

您需要告诉路由器削减其恶作剧,直到完成处理URL。方法如下:

imports: [
  ..
  RouterModule.forRoot(routes, { initialNavigation: false }),
],
...

现在,爱管闲事的路由器将不会在页面加载时执行任何操作。 这意味着您必须照顾它!解析OAuth状态,令牌等。然后找出您尝试所到达的路线(例如从{{ 1}},片段本身的一部分,从redirectUrl开始,直到获得认证为止,或者类似的操作。一旦完成,请呼叫路由器,告诉路由器恢复:

localStorage