javascript - 使用 AAD MSAL 登录 - 登录已在进行中
问题描述
我有一个使用 MSAL 登录的 ASP.net 网站。
我一直遇到的问题是,无论何时用户登录,然后再次注销,用户都会被重定向到注销页面。该页面实现了该new Msal.UserAgentApplication(msalConfig).logout()
功能,并将用户重定向回登录页面。
这一切都完美无缺。然后登录页面将自动将用户重定向回 AAD 登录页面。
如果用户随后决定再次登录,则MyMsalObject.GetAccount()
返回 null 的结果,并发生错误,其中提到以下内容:
ClientAuthError:Login_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: Error during login call - login is already 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,但它仍然无法正常工作..
解决方案
检查会话/本地存储和 cookie 是否有任何悬空的 msal 信息。我们遇到了同样的问题,我偶然发现了这个链接。
https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/1069
它建议清除存储和 cookie,但如果您深入使用浏览器工具,您会看到几个条目,如“msal...interactive...”。这些将具有“进行中”的值,这就是导致错误的原因。
删除这些条目可以解决问题。
推荐阅读
- laravel - 在 Laravel 中限制嵌套关系的结果
- c# - 为什么我的播放器不自动移动?
- mongodb - MongoDB 有效地聚合 ID 以进行批量搜索?
- charts - 如何在底部中心对齐图例
- python - 如何从 wav 文件中获取幅度和频率列表
- javascript - 拍照模式下如何判断留影类型?
- c++ - 编写以下 c++ 代码的更短方法(if-else)
- python - 不显示存储在运行烧瓶文件的模板文件夹中的 gif 图像
- c - 生成 .ko 文件时出错 - ubuntu make 失败并显示“目标‘所有’的配方失败”
- c# - 从 SQLite 查询单个数据到 C# 文本框或标签