Control de errores y excepciones en MSAL.js
En este artículo se proporciona información general sobre los distintos tipos de errores y las recomendaciones para controlar los errores de inicio de sesión comunes.
Aspectos básicos del control de errores en MSAL
Las excepciones de la Biblioteca de autenticación de Microsoft (MSAL) están diseñadas para que los desarrolladores de aplicaciones solucionen problemas y no para mostrarse a los usuarios finales. 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 de Microsoft Entra.
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.
En la sección siguiente se proporcionan más detalles sobre el control de errores de la aplicación.
Control de errores en MSAL.js
MSAL.js proporciona objetos de error que abstraen y clasifican los distintos tipos de errores comunes. También proporciona una interfaz para acceder a detalles específicos de los errores, como los mensajes de error, para controlarlos de manera adecuada.
Objeto de error
export class AuthError extends Error {
// This is a short code describing the error
errorCode: string;
// This is a descriptive string of the error,
// and may also contain the mitigation strategy
errorMessage: string;
// Name of the error class
this.name = "AuthError";
}
Si extiende la clase de error, tendrá acceso a las siguientes propiedades:
AuthError.message
: igual queerrorMessage
.AuthError.stack
: Seguimiento de la pila de los errores que se produjeron.
Tipos de errores
Están disponibles los siguientes tipos de errores:
AuthError
: Clase de error básica para la biblioteca MSAL.js. También se usa para los errores inesperados.ClientAuthError
: clase de error que indica un problema con la autenticación de cliente. La mayoría de los errores que proceden de la biblioteca son del tipo ClientAuthErrors. Estos errores son consecuencia de cosas como una llamada a un método de inicio de sesión con el inicio de sesión ya en curso, cuando el usuario cancela el inicio de sesión, etc.ClientConfigurationError
: clase de error que extiendeClientAuthError
. Se produce antes de que se realicen las solicitudes si los parámetros de configuración de un usuario determinado faltan o tienen un formato incorrecto.ServerError
: clase de error que representa las cadenas de error que envía el servidor de autenticación. Estos errores pueden ser formatos o parámetros de solicitud no válidos o cualquier otro error que impida al servidor autenticar o autorizar al usuario.InteractionRequiredAuthError
: clase de error que extiendeServerError
para representar errores de servidor que requieren una llamada interactiva.acquireTokenSilent
genera este error si se solicita al usuario que interactúe con el servidor para proporcionar credenciales o consentimiento para la autenticación o autorización. Los códigos de error incluyen"interaction_required"
,"login_required"
y"consent_required"
.
Para el control de errores en flujos de autenticación con métodos de redireccionamiento (loginRedirect
, acquireTokenRedirect
), deberá controlar la promesa de redirección, a la que se llama correctamente o con error después del redireccionamiento mediante el método handleRedirectPromise()
de la siguiente manera:
const msal = require('@azure/msal-browser');
const myMSALObj = new msal.PublicClientApplication(msalConfig);
// Register Callbacks for redirect flow
myMSALObj.handleRedirectPromise()
.then(function (response) {
//success response
})
.catch((error) => {
console.log(error);
})
myMSALObj.acquireTokenRedirect(request);
Los métodos de la experiencia emergente (loginPopup
, acquireTokenPopup
) devuelven promesas, de forma que puede usar el patrón de promesa (.then
y .catch
) para controlarlas de la siguiente manera:
myMSALObj.acquireTokenPopup(request).then(
function (response) {
// success response
}).catch(function (error) {
console.log(error);
});
Errores que requieren interacción
Se devuelve un error al intentar usar un método no interactivo para adquirir un token (por ejemplo, acquireTokenSilent
) y que MSAL no pudiera hacerlo de manera silenciosa.
Los posibles motivos son:
- Debe iniciar sesión
- Debe dar su consentimiento
- Debe pasar por una experiencia de autenticación multifactor.
La solución consiste en llamar a un método interactivo como acquireTokenPopup
o acquireTokenRedirect
:
// Request for Access Token
myMSALObj.acquireTokenSilent(request).then(function (response) {
// call API
}).catch( function (error) {
// call acquireTokenPopup in case of acquireTokenSilent failure
// due to interaction required
if (error instanceof InteractionRequiredAuthError) {
myMSALObj.acquireTokenPopup(request).then(
function (response) {
// call API
}).catch(function (error) {
console.log(error);
});
}
});
Acceso condicional y desafíos de notificaciones
Al obtener los tokens de forma automática, la aplicación puede recibir errores si una API a la que está intentando acceder requiere un desafío de notificaciones de acceso condicional como, por ejemplo, una directiva de autenticación multifactor.
El patrón para controlar este error consiste en adquirir interactivamente un token mediante MSAL. De esta forma, se avisa al usuario y le da la oportunidad de cumplir con la directiva de acceso condicional requerida.
En algunos casos, al llamar a una API que requiere acceso condicional, puede recibir un desafío de notificaciones en el error de la API. Por ejemplo, si la directiva de acceso condicional consiste en tener un dispositivo administrado (Intune) el error puede ser parecido a este: AADSTS53000: Your device is required to be managed to access this resource (Se requiere que su dispositivo sea administrado para acceder a este recurso) o algo parecido. En este caso, puede pasar las notificaciones de la llamada de adquisición del token de manera que se le pida al usuario que cumpla con la directiva adecuada.
Al obtener los tokens de forma automática (mediante acquireTokenSilent
) con MSAL.js, la aplicación puede recibir errores cuando una API a la que está intentando acceder requiere un desafío de notificaciones de acceso condicional como, por ejemplo, una directiva de MFA.
El patrón para controlar este error consiste en realizar una llamada interactiva para adquirir el token en MSAL.js como, por ejemplo, acquireTokenPopup
o acquireTokenRedirect
como se puede ver en el ejemplo siguiente:
myMSALObj.acquireTokenSilent(accessTokenRequest).then(function(accessTokenResponse) {
// call API
}).catch(function(error) {
if (error instanceof InteractionRequiredAuthError) {
// extract, if exists, claims from the error object
if (error.claims) {
accessTokenRequest.claims = error.claims,
// call acquireTokenPopup in case of InteractionRequiredAuthError failure
myMSALObj.acquireTokenPopup(accessTokenRequest).then(function(accessTokenResponse) {
// call API
}).catch(function(error) {
console.log(error);
});
}
});
La adquisición interactiva del token avisa al usuario y le da la oportunidad de cumplir con la directiva de acceso condicional requerida.
Al llamar a una API que requiere acceso condicional, puede recibir un desafío de notificaciones en el error de la API. En este caso, puede pasar las notificaciones devueltas en el error al parámetro claims
del objeto de solicitud de token de acceso para satisfacer la política adecuada.
Consulte Uso de las API habilitadas para la evaluación continua de acceso en las aplicaciones para obtener más información.
Uso de otros marcos
El uso de kits de herramientas como Tauri para aplicaciones de página única (SPA) registradas con la plataforma de identidad no se reconoce para aplicaciones de producción. Las SPA solo admiten direcciones URL que comienzan por https
para las aplicaciones de producción y http://localhost
para el desarrollo local. Los prefijos como tauri://localhost
no se pueden usar para las aplicaciones del explorador. Este formato solo se puede admitir para aplicaciones móviles o web, ya que tienen un componente confidencial, a diferencia de las aplicaciones del explorador.
Nuevos intentos después de errores y excepciones
Se espera que implemente sus propias directivas de reintentos al llamar a MSAL. MSAL realiza llamadas HTTP al servicio de Microsoft Entra y, en ocasiones, pueden producirse errores. Por ejemplo, la red puede dejar de funcionar o el servidor sobrecargarse.
HTTP 429
Cuando el servidor de token de servicio (STS) se sobrecarga con demasiadas solicitudes, devuelve un error HTTP 429 con una sugerencia sobre el tiempo de espera necesario antes de volver a intentarlo en el campo de respuesta Retry-After
.
Pasos siguientes
Considere la posibilidad de habilitar el registro en MSAL.js como ayuda para diagnosticar y depurar problemas