Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo apresenta uma visão geral dos diferentes tipos de erros e recomendações para lidar com erros comuns de iniciação de sessão.
Noções básicas de gestão de erros MSAL
As exceções na Biblioteca de Autenticação da Microsoft (MSAL) destinam-se aos programadores de aplicações para resolver problemas, não para serem exibidas aos utilizadores finais. As mensagens de exceção não são localizadas.
Ao processar exceções e erros, pode usar o próprio tipo de exceção e o código de erro para distinguir entre exceções. Para uma lista de códigos de erro, consulte códigos de erro de autenticação e autorização Microsoft Entra.
Durante a experiência de login, pode encontrar erros sobre consentimentos, Acesso Condicional (MFA, Gestão de Dispositivos, restrições baseadas na localização), emissão e resgate de tokens, e propriedades dos utilizadores.
A secção seguinte fornece mais detalhes sobre o tratamento de erros na sua aplicação.
Tratamento de erros em MSAL.js
MSAL.js fornece objetos de erro que abstraem e classificam os diferentes tipos de erros comuns. Também fornece uma interface para aceder a detalhes específicos dos erros, como mensagens de erro, para os tratar adequadamente.
Objeto de erro
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";
}
Ao estender a classe de erro, tem acesso às seguintes propriedades:
-
AuthError.message: Igual aoerrorMessage. -
AuthError.stack: Stack trace para erros gerados.
Tipos de erro
Os seguintes tipos de erro estão disponíveis:
AuthError: Classe base de erro para a biblioteca MSAL.js, também usada para erros inesperados.ClientAuthError: Classe de erro que indica um problema com a autenticação do cliente. A maioria dos erros que vêm da biblioteca são ClientAuthErrors. Estes erros resultam de coisas como chamar um método de login quando o login já está em andamento, o utilizador cancelar o login, e assim sucessivamente.ClientConfigurationError: Classe de erro, que estendeClientAuthError, que é lançada antes de serem feitas requisições quando os parâmetros de configuração do utilizador fornecidos estão malformados ou em falta.ServerError: Classe de erro, representa as cadeias de erro enviadas pelo servidor de autenticação. Estes erros podem ser formatos ou parâmetros de pedido inválidos, ou quaisquer outros erros que impeçam o servidor de autenticar ou autorizar o utilizador.InteractionRequiredAuthError: Classe de erro, estendeServerErrorpara representar erros do servidor, que requerem uma chamada interativa. Este erro é gerado poracquireTokenSilentquando o utilizador tem de interagir com o servidor para fornecer credenciais ou dar consentimento para autenticação/autorização. Os códigos de erro incluem"interaction_required","login_required", e"consent_required".
Para o tratamento de erros em fluxos de autenticação com métodos de redirecionamento (loginRedirect, acquireTokenRedirect), terá de tratar da promessa de redirecionamento, que é chamada com sucesso ou falha após o redirecionamento usando o handleRedirectPromise() método seguinte:
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);
Os métodos para a experiência de pop-up (loginPopup, acquireTokenPopup) devolvem promessas, pelo que podes usar o padrão de promessa (.then e .catch) para lidar com elas conforme mostrado:
myMSALObj.acquireTokenPopup(request).then(
function (response) {
// success response
}).catch(function (error) {
console.log(error);
});
Erros que requerem interação
Um erro é devolvido quando tenta usar um método não interativo para adquirir um token como acquireTokenSilent, mas a MSAL não conseguiu fazê-lo silenciosamente.
As possíveis razões são:
- Precisas de iniciar sessão
- Tem de dar o seu consentimento
- Precisa de passar por uma experiência de autenticação multifator.
A remediação consiste em chamar um método interativo como acquireTokenPopup ou 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);
});
}
});
Acesso Condicional e desafios de sinistros
Ao obter tokens silenciosamente, a sua aplicação pode receber erros quando um pedido de reivindicações de Acesso Condicional, como uma política de MFA, for exigido pela API à qual está a tentar aceder.
O padrão para lidar com este erro é adquirir interativamente um token usando MSAL. Isto incita o utilizador e dá-lhe a oportunidade de cumprir a política de Acesso Condicional exigida.
Em determinados casos, ao chamar uma API que requer Acesso Condicional, pode receber um pedido de declarações na mensagem de erro da API. Por exemplo, se a política de Acesso Condicional for ter um dispositivo gerido (Intune), o erro será algo como AADSTS53000: O seu dispositivo é obrigado a ser gerido para aceder a este recurso ou algo semelhante. Neste caso, pode passar as declarações na chamada de aquisição de token para que o utilizador seja solicitado a satisfazer a política adequada.
Ao obter tokens de forma silenciosa (utilizando acquireTokenSilent) com o MSAL.js, a sua aplicação pode deparar-se com erros quando um desafio de reivindicações de Acesso Condicional, como, por exemplo, uma política de MFA, é exigido pela API à qual está a tentar aceder.
O padrão para lidar com este erro é fazer uma chamada interativa para adquirir token em MSAL.js como acquireTokenPopup ou acquireTokenRedirect como no seguinte exemplo:
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);
});
}
});
A aquisição interativa do token solicita ao utilizador e dá-lhe a oportunidade de cumprir a política de Acesso Condicional exigida.
Ao chamar uma API que requer Acesso Condicional, pode receber um pedido de reivindicações na resposta de erro da API. Neste caso, pode passar as alegações devolvidas no erro para o parâmetro claims no objeto de pedido de token de acesso para cumprir a política adequada.
Veja Como usar APIs habilitadas pela Avaliação de Acesso Contínuo nas suas aplicações para mais detalhes.
Utilização de outros frameworks
O uso de kits de ferramentas como o Tauri para aplicações de página única registadas (SPAs) com a plataforma de identidade não é reconhecido para aplicações de produção. Os SPAs só suportam URLs que começam com https para aplicações de produção e http://localhost para desenvolvimento local. Prefixos como tauri://localhost não podem ser usados em aplicações de navegador. Este formato só pode ser suportado para aplicações móveis ou web, pois têm um componente confidencial, ao contrário das aplicações de navegador.
Tentar novamente após erros e exceções
Espera-se que implemente as suas próprias políticas de repetição ao chamar a MSAL. A MSAL faz chamadas HTTP ao serviço Microsoft Entra e, ocasionalmente, podem ocorrer falhas. Por exemplo, a rede pode cair ou o servidor ficar sobrecarregado.
HTTP 429
Quando o Service Token Server (STS) está sobrecarregado com demasiados pedidos, devolve o erro HTTP 429 com uma dica sobre quanto tempo demora até poderes tentar novamente no campo de resposta Retry-After.
Passos seguintes
Considere ativar o registo no MSAL.js para o ajudar a diagnosticar e a depurar problemas