Internet Explorer および Microsoft Edge ブラウザーに関する既知の問題 (MSAL.js)
セキュリティ ゾーンに起因する問題
IE と Microsoft Edge での認証に関する問題が複数報告されています (Microsoft Edge ブラウザー バージョン 40.15063.0.0 へのアップデート以来)。 Microsoft はこれらの問題を追跡中で、Microsoft Edge チームに通知済みです。 Microsoft Edge については解決に向けて取り組んでいますが、以下では、頻繁に発生する問題と、考えられる実装可能な回避策について説明します。
原因
これらのほとんどの問題の原因は次のとおりです。 Microsoft Edge ブラウザーでは、セッション ストレージとローカル ストレージはセキュリティ ゾーンによって分割されています。 この特定のバージョンの Microsoft Edge では、アプリケーションがゾーンをまたいでリダイレクトされたときに、セッション ストレージとローカル ストレージがクリアされます。 具体的には、セッション ストレージは通常のブラウザー ナビゲーションでクリアされ、セッション ストレージとローカル ストレージの両方がブラウザーの InPrivate モードでクリアされます。 MSAL.js は特定の状態をセッション ストレージに保存し、認証フロー中にこの状態のチェックに依存します。 セッション ストレージがクリアされると、この状態が失われるためエクスペリエンスが途切れることになります。
発行
認証時に無限のリダイレクト ループとページの再読み込みが発生する。 ユーザーが Microsoft Edge でアプリケーションにサインインすると、Microsoft Entra のログイン ページからリダイレクトされて戻され、無限のリダイレクト ループに陥って、ページの再読み込みが繰り返し発生します。 これは通常、セッション ストレージの
invalid_state
エラーを伴います。トークンの取得の無限ループと AADSTS50058 エラー。 Microsoft Edge で実行されているアプリケーションがリソースのトークンを取得しようとすると、アプリケーションはトークン取得呼び出しの無限ループに陥ります。 ネットワーク トレースで、Microsoft Entra ID から次のエラーが返されます。
Error :login_required; Error description:AADSTS50058: A silent sign-in request was sent but no user is signed in. The cookies used to represent the user's session were not sent in the request to Azure AD. This can happen if the user is using Internet Explorer or Edge, and the web app sending the silent sign-in request is in different IE security zone than the Azure AD endpoint (login.microsoftonline.com)
ポップアップ ウィンドウ経由のログインを使用して認証するとき、ポップアップ ウィンドウが閉じない、または動作が停止する。 Microsoft Edge または Internet Explorer (InPrivate) でポップアップ ウィンドウを使用して認証するとき、資格情報を入力してサインインした後、セキュリティ ゾーンをまたぐ複数のドメインがナビゲーションに関係している場合、
MSAL.js
がポップアップ ウィンドウのハンドルを失うためポップアップ ウィンドウが閉じなくなります。プレフィックス tauri が付いたリダイレクト URL を使用するとログインできない。 リダイレクト URI でサポートされているスキームは、運用アプリの場合は
https:
、ローカル開発の場合はhttp://localhost
のみです。 モバイルまたはデスクトップ アプリケーションにtauri://localhost
などの別のスキームを使用しようとすると、次のエラー メッセージが表示されます。 このエラーは、SPA のバックエンドの設計方法の結果として発生します。AADSTS90023: Cross-origin token redemption is permitted only for the 'Single-Page Application' client-type or 'Native' client-type with origin registered in AllowedOriginForNativeAppCorsRequestInOAuthToken allow list.
Update: MSAL.js 0.2.3 で使用可能な修正プログラム
認証のリダイレクト ループの問題に対する修正プログラムが MSAL.js 0.2.3 でリリースされました。 この修正プログラムを利用するには、MSAL.js 構成ファイルのフラグ storeAuthStateInCookie
を有効にします。 既定では、このフラグは false に設定されています。
storeAuthStateInCookie
フラグが有効になると、MSAL.js では、ブラウザーの Cookie を使用して、認証フローを検証するために必要な要求の状態が格納されます。
Note
msal-angular
と msal-angularjs
のラッパーについては、この修正プログラムはまだ利用できません。 この修正プログラムは、ポップアップ ウィンドウの問題には対処していません。
その他の回避策
これらの回避策を採用する前に、この問題が Microsoft Edge ブラウザーの特定のバージョンでのみ発生していて、その他のブラウザーは動作することをテストしてください。
これらの問題を回避する最初の手順として、アプリケーション ドメインと、認証フローのリダイレクトに関与するその他のすべてのサイトが、ブラウザーのセキュリティ設定の信頼済みサイトとして追加されてることを確認します。 これにより、リダイレクトが同じセキュリティ ゾーンに属していることが保証されます。 これを行うには、次のステップに従います。
- Internet Explorer を開き、右上隅にある [設定] (歯車アイコン) をクリックします。
- [インターネット オプション] を選択します
- [セキュリティ] タブを選択します
- [信頼済みサイト] オプションで、 [サイト] ボタンをクリックし、表示されたダイアログ ボックスに URL を追加します。
前述した通り、通常のナビゲーション中にセッション ストレージのみがクリアされるため、代わりにローカル ストレージを使用するように MSAL.js を構成できます。 これは MSAL の初期化中に
cacheLocation
構成パラメーターとして設定できます。
この回避策ではセッションとローカルの両方のストレージがクリアされるため、InPrivate での参照の問題は解決されないことに注意してください。
ポップアップ ブロック機能に起因する問題
たとえば、多要素認証中に 2 つ目のポップアップが開いたときに、IE や Microsoft Edge でポップアップがブロックされることがあります。 ポップアップ ウィンドウを許可するのを 1 回のみにするか、常時にするかについてブラウザーでアラートが表示されます。 許可することを選択した場合、ブラウザーにより自動的にポップアップ ウィンドウが開かれ、null
ハンドルが返されます。 その結果、ライブラリにウィンドウのハンドルがないため、ポップアップ ウィンドウを閉じる方法がなくなります。 Chrome では、ポップアップ ウィンドウが自動的に開かれないため、ポップアップ ウィンドウを許可するプロンプトを表示するときに同じ問題は発生しません。
回避策として、開発者は、アプリの使用を開始する前に IE と Microsoft Edge でポップアップを許可して、この問題を回避する必要があります。
次のステップ
Internet Explorer での MSAL.js の使用について詳しく学習します。