MSAL.NET の例外

MSAL.NET の例外は、アプリ開発者がトラブルシューティングを行い、エンド ユーザーに表示しないことを目的としています。 例外メッセージはローカライズされません。

さまざまな種類の例外

画像

例外 説明
MsalException MSALの例外の基底クラス。
MsalClientException 不完全な構成など、ライブラリ自体で発生するエラー。
MsalServiceException トークン プロバイダー (Microsoft Entra ID) によって送信されるエラーを表します。 Microsoft Entraエラーを参照してください。 サービスに問題があることを示すサービス利用不可エラー (HTTP 500 など) にエラー コードがある service_not_available
MsalUiRequiredException ユーザーが対話形式でログインする必要があることを示す特殊なMicrosoft Entra エラーです。

MSAL では、それ以外の例外はキャッチされません。 ネットワークの問題やキャンセルなどは、アプリケーションにバブルアップされます。

MSAL は、ライブラリ内で問題が発生した場合(不適切な構成など)には MsalClientException をスローし、サービス側またはブローカー内で問題が発生した場合(シークレットの有効期限が切れた場合など)には MsalServiceException をスローします。

一般的な例外

  1. ユーザーによる認証の取り消し (パブリック クライアントのみ)

AcquireTokenInteractiveを呼び出すと、ブラウザーまたはブローカーが呼び出され、ユーザーの操作が処理されます。 ユーザーがこのプロセスを閉じた場合、またはブラウザーの [戻る] ボタンをクリックした場合、MSAL はエラー コード MsalClientException (authentication_canceled) を含むMsalError.AuthenticationCanceledErrorを生成します。

Android では、 タブ付きのブラウザー が使用できない場合にも、この例外が発生する可能性があります。

  1. HTTP 例外

開発者は、MSAL を呼び出すときに独自の再試行ポリシーを実装する必要があります。 MSAL は、Microsoft Entra サービスに対して HTTP 呼び出しを行います。ネットワークがダウンしたり、サーバーが過負荷になったりするなど、エラーが発生することがあります。 HTTP 5xx 状態コードの応答は 1 回再試行されます。

例外の種類

例外を処理する場合は、例外の種類自体と ErrorCode メンバーを使用して例外を区別できます。 ErrorCodeの値は、MsalErrorの定数です。

また、 MsalClientExceptionMsalServiceExceptionMsalUiRequiredExceptionのフィールドを見ることもできます。

MsalServiceExceptionの場合、エラーには認証エラー コードと承認エラー コードで確認できるコードが含まれている場合があります。

MsalUiRequiredException

"UI Required" は、MsalServiceExceptionという名前のMsalUiRequiredExceptionの特殊化です。 つまり、トークンを取得する非対話型のメソッド (AcquireTokenSilent など) を使用しようとしましたが、MSAL ではサイレントモードでは実行できませんでした。 次の理由が考えられます。

  • サインインする必要がある
  • 同意する必要がある
  • 多要素認証エクスペリエンスを使用する必要があります。

修復するには、パブリック クライアントでの AcquireTokenInteractive 、Web サイトへのログインへのユーザーのリダイレクト、Web API での 401 による応答などをユーザーに求める AcquireToken* メソッドを呼び出します。

継続的アクセス評価

アプリケーションで継続的アクセス評価が有効な API を使用する方法を参照してください。

MSAL.NET での要求チャレンジ例外の処理

場合によっては、Microsoft Entra テナント管理者が条件付きアクセス ポリシーを有効にした場合、アプリケーションで要求チャレンジの例外を処理する必要があります。 これは、Claims プロパティが空にならない MsalServiceException として表示されます。 たとえば、条件付きアクセス ポリシーでマネージド デバイス (Intune) を使用する場合、エラーは AADSTS53000: Your device is required to be managed to access this resource のようなものになります。

要求チャレンジを処理するには、 WithClaims(String) メソッドを使用する必要があります。

再試行ポリシー

再試行ポリシーを参照してください