Excepciones en MSAL.NET

Las excepciones de MSAL.NET están pensadas para que los desarrolladores de aplicaciones solucionen problemas y no para mostrarlos a los usuarios finales. Los mensajes de excepción no se localizan.

Los distintos tipos de excepciones

imagen

Exception Description
MsalException Clase base para las excepciones de MSAL.
MsalClientException Errores que se producen en la propia biblioteca, por ejemplo, una configuración incompleta.
MsalServiceException Representa los errores transmitidos por el proveedor de tokens (Microsoft Entra ID). Consulte errores de Microsoft Entra. Errores de servicio no disponibles (por ejemplo, HTTP 500), que indican un problema con el servicio, tienen el código de error. service_not_available
MsalUiRequiredException Error especial Microsoft Entra que indica que el usuario debe iniciar sesión de forma interactiva.

MSAL no detecta ninguna otra excepción. Los problemas de red, las cancelaciones, etc. se propagan a la aplicación.

MSAL genera MsalClientException para los errores que se producen en la biblioteca (por ejemplo, una configuración incorrecta) y MsalServiceException para los errores que se producen en el servicio o en el broker (por ejemplo, un secreto ha expirado).

Excepciones comunes

  1. Autenticación cancelada por el usuario (solo cliente público)

Al llamar a AcquireTokenInteractive, se invoca un navegador o el intermediario para gestionar la interacción del usuario. Si el usuario cierra este proceso o si presiona el botón Atrás del explorador, MSAL genera un MsalClientException con el código authentication_canceled de error (MsalError.AuthenticationCanceledError).

En Android, esta excepción también puede producirse si un explorador con pestañas no está disponible.

  1. Excepciones HTTP

Se espera que los desarrolladores implementen sus propias políticas de reintento al realizar llamadas a MSAL. MSAL realiza llamadas HTTP al servicio Microsoft Entra y se pueden producir errores ocasionales, por ejemplo, la red puede bajar o el servidor está sobrecargado. Las respuestas de código de estado HTTP 5xx se reintentan una vez.

Tipos de excepción

Al procesar excepciones, puede usar el propio tipo de excepción y el ErrorCode miembro para distinguir entre excepciones. Los valores de ErrorCode son constantes de MsalError.

También puede echar un vistazo a los campos de MsalClientException, MsalServiceException, MsalUiRequiredException.

En el caso de MsalServiceException, el error puede contener un código que puede encontrar en Códigos de error de autenticación y autorización.

MsalUiRequiredException

"UI Required" es una especialización de MsalServiceException denominada MsalUiRequiredException. Esto significa que ha intentado usar un método no interactivo para adquirir un token (por ejemplo, AcquireTokenSilent), pero MSAL no pudo hacerlo de forma silenciosa. esto puede deberse a:

  • Tienes que iniciar sesión
  • debe dar su consentimiento
  • Debe pasar por una experiencia de autenticación multifactor.

Para corregirlo, llame a un método AcquireToken* que solicite al usuario, por ejemplo AcquireTokenInteractive , en clientes públicos, redirigir al usuario para iniciar sesión en sitios web o responder con un 401 en una API web.

Evaluación continua del acceso

Consulte Uso de las API habilitadas para evaluación de acceso continuo en las aplicaciones.

Administración de excepciones de desafío de reclamaciones en MSAL.NET

En algunos casos, cuando el administrador del inquilino de Microsoft Entra haya habilitado directivas de acceso condicional, tu aplicación deberá administrar excepciones de verificación de reclamaciones. Esto aparecerá como un MsalServiceException cuya propiedad Claims no estará vacía. Por ejemplo, si la directiva de acceso condicional requiere un dispositivo administrado (Intune), el error será algo como AADSTS53000: Your device is required to be managed to access this resource o algo similar.

Para administrar la verificación de reclamaciones, deberás utilizar el método WithClaims(String).

Políticas de reintentos

Consulte Retry-Policy