在单击登录角度应用程序后,正确地将请求发送到login.microsoft.com。该请求将获得附有有效令牌的回复。 在Firefox / Chrome上执行此操作没问题时,正确处理了redirectUri并将其重定向到登录的用户页面。
但是在Edge上,似乎某些版本的Edge可能无法正确读取答复,或者无法正确创建登录请求URL。
产生的redirectUri在./null
网站(即https://[some URL] /空)处结束
在引荐来源为localhost的调试中不存在此问题,重定向正确完成。仅当在IIS上部署时,重定向才会导致错误的结果。
IIS站点具有一个重写规则,该规则将http请求重定向到https流量
症状
它似乎仅在某些Edge版本上发生。
Edge版本44.18362.10,EdgeHTML 18.18362可以根据需要进行响应,没问题。
Edge版本44.17763.10,EdgeHTML 18.17763给出了错误
使用
角度6.0.0
MsAdalAngular6Service(https://www.npmjs.com/package/microsoft-adal-angular6)
JWT令牌载体。
sessionStorage作为令牌存储
app.module.ts
进口的MsAdal引发剂
MsAdalAngular6Module.forRoot({
tenant: 'tenantID',
clientId: 'clientID',
redirectUri: window.location.origin,
endpoints: {
[SITE ENDPOINTS]
},
navigateToLoginRequestUrl: true,
cacheLocation: 'sessionStorage',
})
由于Edge有时也会在登录请求中插入null,因此Edge可能会错误地解释window.location.origin
。
尝试过:
硬编码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
有人见过这个问题,或者知道如何解决吗?
答案 0 :(得分:2)
这似乎是已记录的错误。 https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/330 https://github.com/AzureAD/azure-activedirectory-library-for-js/wiki/Known-issues-on-Edge#issues
一种解决方法是在MSAL配置中将NavigateToLoginRequestUrl设置为false。 (我看到您已将其设置为默认设置true。)如果将其设置为false,则不会将用户重定向到他/她开始的页面,但是在回调中,您可以将浏览器位置重置为所需的位置使用window.location.href网址。