Control de excepciones y errores en MSAL para Android

Las excepciones de la Biblioteca de autenticación de Microsoft (MSAL) están diseñadas para ayudar a los desarrolladores de aplicaciones a solucionar problemas de sus aplicaciones. Los mensajes de excepción no están traducidos.

Cuando procesa excepciones y errores, puede usar el propio tipo de excepción y el código de error para distinguir entre las excepciones. Para ver una lista con los códigos de error, consulte Códigos de error de autenticación y autorización.

Durante la experiencia de inicio de sesión, puede encontrar errores de consentimiento, de acceso condicional (MFA, administración de dispositivos, restricciones basadas en la ubicación), de emisión y canje de tokens, y de las propiedades del usuario.

Clase de error Causa o cadena error Realización del control
MsalUiRequiredException
  • INVALID_GRANT: el token de actualización usado para canjear el token de acceso no es válido, ha expirado o se ha revocado. Esta excepción puede deberse a un cambio de contraseña.
  • NO_TOKENS_FOUND: el token de acceso no existe y no se puede encontrar ningún token de actualización para canjear el token de acceso.
  • Se requiere una actualización a edición superior
    • MFA
    • Faltan notificaciones
  • Bloqueado por el acceso condicional (por ejemplo, instalación necesaria del agente de autenticación)
  • NO_ACCOUNT_FOUND: No hay ninguna cuenta disponible en la memoria caché para la autenticación silenciosa.
Llame a acquireToken() para solicitar al usuario que escriba su nombre de usuario y contraseña y, posiblemente, dé su consentimiento y realice la autenticación multifactor.
MsalDeclinedScopeException
  • DECLINED_SCOPE: el usuario o el servidor no ha aceptado todos los ámbitos. El servidor puede rechazar un ámbito si el ámbito solicitado no es compatible, no se reconoce o no se admite para una cuenta determinada.
El desarrollador debe decidir si desea continuar con la autenticación con los ámbitos concedidos o finalizar el proceso de autenticación. Opción para volver a enviar la solicitud de adquisición de token solo para los ámbitos concedidos y proporcionar sugerencias para los permisos que se han concedido pasando silentParametersForGrantedScopes y llamando a acquireTokenSilent.
MsalServiceException
  • INVALID_REQUEST: en esta la solicitud falta un parámetro necesario, dicha solicitud incluye un parámetro no válido o un parámetro repetido, o bien no tiene el formato correcto.
  • SERVICE_NOT_AVAILABLE: representa los códigos de error 500/503/506 debido a que el servicio está inactivo.
  • UNAUTHORIZED_REQUEST: el cliente no está autorizado para solicitar un código de autorización.
  • ACCESS_DENIED: El propietario del recurso o el servidor de consentimiento rechazaron la solicitud.
  • INVALID_INSTANCE: error de validación de AuthorityMetadata
  • UNKNOWN_ERROR: no se pudo realizar la solicitud al servidor, pero el servicio no devuelve ningún error ni error_description.
    Esta clase de excepción representa los errores al comunicarse con el servicio, puede ser desde los puntos de conexión de autorización o de token. MSAL lee el error y error_description de la respuesta del servidor. Normalmente, estos errores se resuelven corrigiendo las configuraciones de la aplicación en el código o en el portal de registro de aplicaciones. Rara vez una interrupción del servicio puede desencadenar esta advertencia, que solo se puede mitigar esperando a que el servicio se recupere.
    MsalClientException
    • MULTIPLE_MATCHING_TOKENS_DETECTED: se encontraron varias entradas de caché y el SDK no puede identificar el acceso correcto o el token de actualización de la memoria caché. Esta excepción suele indicar un error en el SDK para almacenar tokens o que la autoridad no se proporciona en la solicitud silenciosa y se encuentran varios tokens coincidentes.
    • DEVICE_NETWORK_NOT_AVAILABLE: no hay ninguna red activa disponible en el dispositivo.
    • JSON_PARSE_FAILURE: El SDK no pudo analizar el formato JSON.
    • IO_ERROR: se produjo IOException; podría ser un error de dispositivo o de red.
    • MALFORMED_URL: la dirección URL tiene un formato incorrecto. Probablemente se originó al construir la solicitud de autenticación, la autoridad o el URI de redirección.
    • UNSUPPORTED_ENCODING: el dispositivo no admite la codificación.
    • NO_SUCH_ALGORITHM: no se admite el algoritmo utilizado para generar el desafío PKCE.
    • INVALID_JWT: el elemento JWT devuelto por el servidor no es válido, está vacío o tiene un formato incorrecto.
    • STATE_MISMATCH: el estado de la respuesta de autorización no coincidía con el estado de la solicitud de autorización. En el caso de las solicitudes de autorización, el SDK comprobará el estado devuelto de la redirección y el que se envió en la solicitud.
    • UNSUPPORTED_URL: la dirección URL no es compatible, no se puede realizar la validación de la autoridad de ADFS.
    • AUTHORITY_VALIDATION_NOT_SUPPORTED: la autoridad no es compatible con la validación de autoridad. El SDK admite las autoridades de B2C, pero no la validación de tales autoridades. Solo se admitirá el host conocido.
    • CHROME_NOT_INSTALLED: Chrome no está instalado en el equipo. El SDK usa la pestaña de personalización de Chrome para las solicitudes de autorización si está disponible y se revertirá explorador Chrome.
    • USER_MISMATCH: el usuario proporcionado en la solicitud de adquisición del token no coincide con el usuario devuelto desde el servidor.
    Esta clase de excepción representa los errores generales que son locales para la biblioteca. Estas excepciones se pueden controlar corrigiendo la solicitud.
    MsalUserCancelException
    • USER_CANCELED: el usuario inició el flujo interactivo y, antes de recibir los tokens, canceló la solicitud.
    MsalArgumentException
    • ILLEGAL_ARGUMENT_ERROR_CODE
    • AUTHORITY_REQUIRED_FOR_SILENT: se debe especificar la autoridad para acquireTokenSilent.
    El desarrollador puede mitigar estos errores corrigiendo de argumentos y garantizando la actividad para la autenticación interactiva, la devolución de llamada de finalización, los ámbitos y una cuenta con un identificador válido.

    Almacenamiento en caché de los errores

    En el fragmento de código siguiente se muestra un ejemplo de detección de errores en el caso de llamadas acquireToken silenciosas.

    /**
     * Callback used in for silent acquireToken calls.
     */
    private SilentAuthenticationCallback getAuthSilentCallback() {
        return new SilentAuthenticationCallback() {
    
            @Override
            public void onSuccess(IAuthenticationResult authenticationResult) {
                Log.d(TAG, "Successfully authenticated");
    
                /* Successfully got a token, use it to call a protected resource - MSGraph */
                callGraphAPI(authenticationResult);
            }
    
            @Override
            public void onError(MsalException exception) {
                /* Failed to acquireToken */
                Log.d(TAG, "Authentication failed: " + exception.toString());
                displayError(exception);
    
                if (exception instanceof MsalClientException) {
                    /* Exception inside MSAL, more info inside MsalError.java */
                } else if (exception instanceof MsalServiceException) {
                    /* Exception when communicating with the STS, likely config issue */
                } else if (exception instanceof MsalUiRequiredException) {
                    /* Tokens expired or no session, retry with interactive */
                }
            }
        };
    }
    

    Pasos siguientes

    Obtenga más información sobre el registro en MSAL para Android.