Angular 6,ADAL,Azure重定向Uri,MS Edge重定向到../null

时间:2019-07-08 15:36:17

标签: angular adal

问题:

在单击登录角度应用程序后,正确地将请求发送到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

结尾

有人见过这个问题,或者知道如何解决吗?

1 个答案:

答案 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网址。