为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

莫回无 2021-10-29 17:00:31
我有一个使用 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 - 悄悄地根本没有帮助,我正在使用 chrome 但它仍然不起作用..
查看完整描述

2 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

首先,在使用 时loginRedirect,您需要将用户重定向回您的应用程序时要运行的代码放在里面,myMsalObj.handleRedirectCallback(callback)而不是放在您启动重定向过程的函数中。另请注意,handleRedirectCallback应在初始页面加载时注册。


例子:



const myMSALObj = new Msal.UserAgentApplication(msalConfig);


$(document).ready(function(){

    myMSALObj.handleRedirectCallback(function(error, response) {

        var account = myMSALObj.getAcccount();


        if (account) {

            // user is logged in

        }

    });

});

不过,我对您的应用程序有些困惑。你是说你的应用程序中有页面可以调用myMSALObj.logout()?


查看完整回答
反对 回复 2021-10-29
  • 2 回答
  • 0 关注
  • 428 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信