【发布时间】:2017-01-08 12:06:40
【问题描述】:
由于我们使用的是 OpenID Connect,我们需要 Aurelia 路由器来处理 OpenID Connect 授权响应,如下所示:
https://client.example.org/signin-oidc#
access_token=SlAV32hkKG
&token_type=bearer
&id_token=eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso
&expires_in=3600
&state=af0ifjsldkj
为了做到这一点,我们设置了具有推送状态的路由器,如下所示。
// switch from hash (#) to slash (/) navigation
routerConfig.options.pushState = true;
这在大多数网络浏览器中都能成功运行。 Aurelia 路由器处理 /signin-oidc 路由,客户端代码可以访问片段。很好。
然而,Yosemite 上的 Safari WebKit bug #24701 删除了重定向片段,并且成功的 OpenID Connect 授权响应是重定向(找到 302)。结果:浏览器只发送以下内容,缺少片段。不好。
https://client.example.org/signin-oidc
解决方法是在哈希前面加上一个正斜杠:
https://client.example.org/signin-oidc/#
access_token=SlAV32hkKG
&token_type=bearer
&id_token=eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso
&expires_in=3600
&state=af0ifjsldkj
这解决了 WebKit 错误,Yosemite 上的 Safari
解决了吗?没有。
解决方法破坏了 Aurelia 路由器,它无法再理解 URI 的 /# 部分。我们如何设置 Aurelia 路由器来处理来自 OpenID Connect 授权服务器的成功授权响应?
【问题讨论】:
标签: aurelia