Exceptions dans MSAL.NET

Les exceptions dans MSAL.NET sont destinées aux développeurs d’applications pour résoudre les problèmes et non pour les afficher aux utilisateurs finaux. Les messages d’exception ne sont pas localisés.

Les différents types d’exceptions

image

Exception Description
MsalException Classe de base pour les exceptions MSAL.
MsalClientException Erreurs qui se produisent dans la bibliothèque elle-même, par exemple une configuration incomplète.
MsalServiceException Représente les erreurs transmises par le fournisseur de jetons (Microsoft Entra ID). Consultez Erreurs Microsoft Entra. Les erreurs de service indisponible (par exemple, HTTP 500), qui indiquent un problème au niveau du service, portent le code d’erreur service_not_available
MsalUiRequiredException Erreur Microsoft Entra spéciale qui indique que l’utilisateur doit se connecter de manière interactive.

Aucune autre exception n’est interceptée par MSAL. Tous les problèmes de réseau, annulations, etc. sont remontés à l’application.

MSAL lève MsalClientException pour les problèmes qui surviennent au sein de la bibliothèque (par exemple, une mauvaise configuration) et MsalServiceException pour les problèmes qui surviennent côté service ou dans le broker (par exemple, lorsqu’un secret a expiré).

Exceptions courantes

  1. Authentification annulée par l’utilisateur (client public uniquement)

Lors de l’appel AcquireTokenInteractive, un navigateur ou le répartiteur est appelé pour gérer l’interaction utilisateur. Si l’utilisateur ferme ce processus ou s’il clique sur le bouton Retour du navigateur, MSAL génère un MsalClientException avec le code d’erreur authentication_canceled (MsalError.AuthenticationCanceledError).

Sur Android, cette exception peut également se produire si un navigateur avec des onglets n’est pas disponible.

  1. HTTP Exceptions

Les développeurs doivent mettre en œuvre leurs propres stratégies de réessai lorsqu’ils appellent MSAL. MSAL effectue des appels HTTP au service Microsoft Entra, et des défaillances occasionnelles peuvent se produire, par exemple le réseau peut descendre ou le serveur est surchargé. Les réponses du code d’état HTTP 5xx sont retentées une fois.

Types d’exceptions

Lors du traitement des exceptions, vous pouvez utiliser le type d’exception lui-même et le ErrorCode membre pour faire la distinction entre les exceptions. Les valeurs de ErrorCode sont des constantes de MsalError.

Vous pouvez également examiner les champs de MsalClientException, MsalServiceExceptionMsalUiRequiredException.

Dans le cas de MsalServiceException, l’erreur peut contenir un code que vous pouvez trouver dans les codes d’erreur d’authentification et d’autorisation.

MsalUiRequiredException

« UI Required » est une spécialisation de MsalServiceException nommée MsalUiRequiredException. Cela signifie que vous avez tenté d’utiliser une méthode non interactive d’acquisition d’un jeton (par exemple, AcquireTokenSilent), mais MSAL n’a pas pu le faire en mode silencieux. cela peut être dû au fait que :

  • vous devez vous connecter
  • vous devez donner votre consentement
  • vous devez passer par une expérience d’authentification multifacteur.

Pour corriger, appelez une méthode AcquireToken* qui invite l’utilisateur, par exemple AcquireTokenInteractive dans les clients publics, redirigez l’utilisateur vers la connexion à des sites web ou répondez avec un 401 dans une API web.

Évaluation continue de l’accès

Découvrez comment utiliser les API activées pour l’évaluation de l’accès continu dans vos applications.

Gestion des exceptions de demande de revendication dans MSAL.NET

Dans certains cas, lorsque l’administrateur du locataire Microsoft Entra a activé les stratégies d’accès conditionnel, votre application doit gérer les exceptions de défi de revendication. Cela apparaîtra comme un MsalServiceException dont la propriété Claims ne sera pas vide. Par exemple, si la stratégie d’accès conditionnel exige un appareil géré (Intune), l’erreur sera quelque chose comme AADSTS53000: Your device is required to be managed to access this resource ou un message similaire.

Pour gérer la demande de revendication, vous devez utiliser la WithClaims(String) méthode.

Stratégies de nouvelle tentative

Voir Retry-Policy