【问题标题】:Angular 6, ADAL, Azure Redirect Uri, MS Edge redirects to ../nullAngular 6、ADAL、Azure 重定向 Uri、MS Edge 重定向到 ../null
【发布时间】: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


    【解决方案1】:

    这似乎是一个记录错误。 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 的 url。

    【讨论】:

    • 设置 navigateToLoginRequestUrl: falseredirectUri: <domain/redirect-page> 解决了这个问题。 (在 chrome 中面临问题)。不确定在哪里/如何使用您提到的回调。如果您可以为此发布一些链接,那将会很有帮助。谢谢
    • @Marilee 我已经尝试过您的建议,但提供的解决方案似乎不起作用?如果我对 redirectUri 进行硬编码,返回的令牌似乎根本没有得到处理?很奇怪,它只是返回但实际令牌尚未处理,因为收到令牌时用户仍未登录?还有其他有用的提示吗?
    猜你喜欢
    • 2016-01-20
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多