javascript - 使用 AAD MSAL 登录 - 登录已在进行中

标签 javascript azure authentication azure-active-directory azure-ad-msal

我有一个 ASP.net 网站,它使用 MSAL 登录。

我一直遇到的问题是,每当用户登录然后再次注销时,用户都会被重定向到注销页面。 此页面实现了 new Msal.UserAgentApplication(msalConfig).logout() 函数,并将用户重定向回登录页面。

这一切都很完美。然后,登录页面将自动将用户重定向回 AAD 登录页面。

如果用户随后决定再次登录,MyMsalObject.GetAccount() 的结果将返回 null,并且会出现错误,其中提到以下内容:

ClientAuthError: Login_In_Progress: Error during login call - login is already in progress.

一开始我使用一个js文件来处理登录和注销,然后我意识到这可能不是最好的解决方案,因为它尝试在加载时登录。

所以我决定将它们分成两个单独的 JS 文件,但这并没有解决我的问题。

msalObject 定义:

var msalConfig = {
    auth: {
        clientId: "my_client_id",
        authority: "my_authority_url",
        redirectUri: "http://localhost:port"
    },
    cache: {
        cacheLocation: "localStorage",
        storeAuthStateInCookie: true
    }
};

var myMSALObj = new Msal.UserAgentApplication(msalConfig);

登录代码:

$(document).ready(function(){
    if (!myMSALObj.getAccount()) {
            myMSALObj.loginRedirect(msalConfig);
            acquireTokenRedirectAndCallMSGraph();
    }
});

编辑:

一些额外的细节。 我现在已经做到了,用户必须单击按钮才能重定向到 Microsoft 进行登录。

不幸的是,上述内容仍然适用。首次成功登录并注销后,二次登录尝试不会在函数 getaccount() 中产生值,尽管它第一次运行得很好。

登录后出现的错误仍然是相同的:

ClientAuthError:Login_In_Progress:登录调用期间出错 - 登录已在进行中。

即使我刚刚登录..

有人有解决办法吗?

编辑2:

有一点进展......我已经能够通过更改用户注销的方式来修复上述错误。

配置文件现在是文档中的定义,我也将注销功能移到了其中。

虽然我现在面临着新的挑战..

Refused to display 'https://login.microsoftonline.com/{{}}' in a frame because it set 'X-Frame-Options' to 'deny'.

我不完全确定这是前进还是倒退。复制场景保持不变,您登录,然后注销并再次登录,当微软将用户发送回登录页面时,我收到此编辑中提到的错误,但我第一时间没有收到此错误登录尝试。

答案如下:https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/FAQs#q6-how-to-avoid-page-reloads-when-acquiring-and-renewing-tokens-silently完全没有帮助,我正在使用 chrome,但它仍然不起作用..

最佳答案

检查 session /本地存储和 cookie 中是否有任何悬空的 msal 信息。我们遇到了同样的问题,我偶然发现了这个链接。

https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/1069

它建议清除存储和 cookie,但如果您深入使用浏览器工具,您会看到几个条目,例如“msal...interactive...”。这些值将具有“进行中”的值,这就是导致错误的原因。

删除这些条目可以解决问题。

关于javascript - 使用 AAD MSAL 登录 - 登录已在进行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58113737/

相关文章:

javascript - typeahead.js 提示和突出显示参数不适用于预取和远程

javascript - 在 JavaScript 中将字符串解析为命令和参数

javascript - 两种不同的日期格式

azure - 使用 asp.net core 和 azure cloudblob 流媒体文件

azure - 确保 Azure 服务总线通过 HTTPS 而不是 HTTP 连接

javascript - Bittrex v3 API - 无效签名响应

authentication - RSA 签名机制

IE9 和旧版本之间的 JavaScript 行为差异

azure - "Database Units - Web Edition"超出配额

laravel - 如果用户在 Laravel 中通过身份验证,如何 checkin Vue 组件?