【发布时间】:2019-11-18 04:02:38
【问题描述】:
问题:
点击登录 Angular 应用程序正确地向 login.microsoft.com 发送请求。该请求会收到附有有效令牌的回复。 在 Firefox/Chrome 上执行此操作时没问题,redirectUri 被正确处理并重定向到登录用户页面。
然而,在 Edge 上,似乎某些版本的 Edge 要么没有正确读取回复,要么没有正确创建登录请求 URL。
生成的 redirectUri 以./null 站点结束(即https://[some URL]/null)
在引用者为 localhost 的调试中不存在该问题,重定向正确完成。只有在 IIS 上部署时,重定向才会导致错误的结果。
IIS 站点有一个重写规则,将 http 请求重定向到 https 流量
20190806 更新:
进一步研究后,我发现使用 localStorage 而不是 sessionStorage 可以使整个事情运行良好(在 Firefox/Chrome/Edge 上)
另见:localStorage not working in Edge?
尽管这仍然不能解释为什么sessionStorage 不起作用。版本无关(虽然我在两个系统上有两个不同的 MS Egde 版本,一个工作正常,另一个没有)
症状
它似乎只发生在某些 Edge 版本上。
Edge 版本 44.18362.10,EdgeHTML 18.18362 按要求响应没问题。
Edge 版本 44.17763.10,EdgeHTML 18.17763 给出错误
我无法验证是否是这种情况,从 17763 升级 => 18392 并没有解决问题。
使用
Angular 6.2.9
MsAdalAngular6Service (https://www.npmjs.com/package/microsoft-adal-angular6)
JWT 令牌持有者。
sessionStorage 作为令牌存储 => 问题通过交换到 localStorage 得到解决
app.module.ts
导入中的 MsAdal 发起者
MsAdalAngular6Module.forRoot({
tenant: 'tenantID',
clientId: 'clientID',
redirectUri: window.location.origin,
endpoints: {
[SITE ENDPOINTS]
},
navigateToLoginRequestUrl: true,
cacheLocation: 'sessionStorage',
})
可能是 Edge 错误地解释了 window.location.origin,因为它有时也会在登录请求中注入 null。
试过了:
硬编码 redirectUri 值
使用不同的 redirectUri window 构造函数 ('https://' + windows.location.hostname)
来自:https://tosbourn.com/a-fix-for-window-location-origin-in-internet-explorer/
window.location.hostname + (window.location.port ? ':' + window.location.port: '');
各种其他尝试,都导致相同的结果。
return redirectUri 以./null结尾
有没有人见过这个问题或者知道如何解决这个问题?
【问题讨论】:
标签: angular local-storage adal session-storage