MSAL.NET の例外は、アプリ開発者がトラブルシューティングを行い、エンド ユーザーに表示しないことを目的としています。 例外メッセージはローカライズされません。
さまざまな種類の例外
| 例外 | 説明 |
|---|---|
MsalException |
MSALの例外の基底クラス。 |
MsalClientException |
不完全な構成など、ライブラリ自体で発生するエラー。 |
MsalServiceException |
トークン プロバイダー (Microsoft Entra ID) によって送信されるエラーを表します。
Microsoft Entraエラーを参照してください。 サービスに問題があることを示すサービス利用不可エラー (HTTP 500 など) にエラー コードがある service_not_available |
MsalUiRequiredException |
ユーザーが対話形式でログインする必要があることを示す特殊なMicrosoft Entra エラーです。 |
MSAL では、それ以外の例外はキャッチされません。 ネットワークの問題やキャンセルなどは、アプリケーションにバブルアップされます。
MSAL は、ライブラリ内で問題が発生した場合(不適切な構成など)には MsalClientException をスローし、サービス側またはブローカー内で問題が発生した場合(シークレットの有効期限が切れた場合など)には MsalServiceException をスローします。
一般的な例外
- ユーザーによる認証の取り消し (パブリック クライアントのみ)
AcquireTokenInteractiveを呼び出すと、ブラウザーまたはブローカーが呼び出され、ユーザーの操作が処理されます。 ユーザーがこのプロセスを閉じた場合、またはブラウザーの [戻る] ボタンをクリックした場合、MSAL はエラー コード MsalClientException (authentication_canceled) を含むMsalError.AuthenticationCanceledErrorを生成します。
Android では、 タブ付きのブラウザー が使用できない場合にも、この例外が発生する可能性があります。
- HTTP 例外
開発者は、MSAL を呼び出すときに独自の再試行ポリシーを実装する必要があります。 MSAL は、Microsoft Entra サービスに対して HTTP 呼び出しを行います。ネットワークがダウンしたり、サーバーが過負荷になったりするなど、エラーが発生することがあります。 HTTP 5xx 状態コードの応答は 1 回再試行されます。
例外の種類
例外を処理する場合は、例外の種類自体と ErrorCode メンバーを使用して例外を区別できます。
ErrorCodeの値は、MsalErrorの定数です。
また、 MsalClientException、 MsalServiceException、 MsalUiRequiredExceptionのフィールドを見ることもできます。
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) メソッドを使用する必要があります。
再試行ポリシー
再試行ポリシーを参照してください