web-dev-qa-db-ja.com

AAD MSALでログイン-ログインはすでに進行中です

MSALを使用してログインするASP.net Webサイトがあります。

私が抱えている問題は、ユーザーがログインした後、再びログアウトすると、ユーザーがログアウトページにリダイレクトされることです。このページはnew Msal.UserAgentApplication(msalConfig).logout()関数を実装し、ユーザーをログインページにリダイレクトします。

これはすべて完璧に機能します。ログインページは、ユーザーをAADログインページに自動的にリダイレクトします。

その後、ユーザーが再度ログインすると、MyMsalObject.GetAccount()の結果はnullを返し、次のエラーが発生します。

ClientAuthError:Login_In_Progress:ログインコール中のエラー-ログインはすでに進行中です。

最初に1つのjsファイルを使用してログインとログアウトを処理しましたが、ロード時にログインを試行したため、それがおそらく最善の解決策ではないことに気付きました。

だから私はそれらを2つの別々の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にリダイレクトされる前にボタンをクリックする必要があるようになりました。

上記は残念ながらまだ適用されます。初めて正常にログインしてログアウトした後、2回目のログインを試みても、関数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'.
_

そして、これが前進か後退かは完全にはわかりません。再現シナリオは同じままで、ログインしてからログアウトしてから再度ログインします。Microsoftがユーザーをログインページに戻すと、この編集で言及されているエラーが表示されますが、最初はこのエラーが表示されません。ログイン試行。

回答は次のとおりです: https://github.com/AzureAD/Microsoft-authentication-library-for-js/wiki/FAQs#q6-how-to-avoid-page-reloads-when-acquiring-and -renewing-tokens-silently はまったく役に立ちません。chromeを使用していますが、それでも動作しません。

4
Gerwin

まず、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()を呼び出すだけのページがあると言っていませんか?

0
jasonnutter