Exceções no MSAL.NET

As exceções no MSAL.NET destinam-se aos programadores de aplicações para resolver problemas e não para serem exibidas aos utilizadores finais. As mensagens de exceção não são localizadas.

Os diferentes tipos de exceções

image

Exception Description
MsalException Classe base para exceções do MSAL.
MsalClientException Erros que ocorrem na própria biblioteca, por exemplo, uma configuração incompleta.
MsalServiceException Representa erros transmitidos pelo fornecedor do token (Microsoft Entra ID). Ver erros do Microsoft Entra. Erros de serviço não disponíveis (por exemplo, HTTP 500), indicando um problema com o serviço, têm o código de erro service_not_available
MsalUiRequiredException Erro especial Microsoft Entra que indica que o utilizador deve iniciar sessão interativamente.

Nenhuma outra exceção é apanhada pelo MSAL. Quaisquer problemas de rede, cancelamentos, etc., são propagados até à aplicação.

O MSAL lança MsalClientException para coisas que correm mal dentro da biblioteca (por exemplo, má configuração) e MsalServiceException para coisas que correm mal do lado do serviço ou no broker (por exemplo, um segredo expirado).

Exceções comuns

  1. Autenticação cancelada pelo utilizador (apenas cliente público)

Ao chamar AcquireTokenInteractive, é invocado um navegador ou o corretor para gerir a interação do utilizador. Se o utilizador fechar este processo ou se carregar no botão de voltar do navegador, o MSAL gera um MsalClientException com o código authentication_canceled de erro (MsalError.AuthenticationCanceledError).

No Android, esta exceção também pode ocorrer se um navegador com abas não estiver disponível.

  1. Exceções HTTP

Espera-se que os desenvolvedores implementem as suas próprias políticas de repetição ao invocar o MSAL. A MSAL faz chamadas HTTP ao serviço Microsoft Entra, e podem ocorrer falhas ocasionais, por exemplo, a rede pode cair ou o servidor ficar sobrecarregado. As respostas ao código de estado HTTP 5xx são repetidas uma vez.

Tipos de exceção

Ao processar exceções, pode utilizar o próprio tipo de exceção e o membro ErrorCode para distinguir entre exceções. Os valores de ErrorCode são constantes de MsalError.

Também pode olhar para os campos de MsalClientException, MsalServiceException, MsalUiRequiredException.

No caso de MsalServiceException, o erro pode conter um código que pode encontrar em códigos de erro de autenticação e autorização.

MsalUiRequiredException

"UI Required" é uma especialização de MsalServiceException denominada MsalUiRequiredException. Isto significa que tentou usar um método não interativo para adquirir um token (por exemplo, AcquireTokenSilent), mas a MSAL não conseguiu fazê-lo silenciosamente. Isto pode dever-se porque:

  • Precisa de iniciar sessão
  • Tem de dar o seu consentimento
  • Precisa de passar por uma experiência de autenticação multifator.

Para remediar, chame um método AcquireToken* que solicite ao utilizador, por exemplo AcquireTokenInteractive em clientes públicos, que redirecione o utilizador para iniciar sessão em sites ou responda com um 401 numa API web.

Avaliação Contínua de Acesso

Veja Como usar APIs habilitadas pela Avaliação de Acesso Contínuo nas suas aplicações.

Gestão de exceções a contestação de reivindicações no MSAL.NET

Em alguns casos, quando o administrador do inquilino da Microsoft Entra ativa políticas de acesso condicional, a sua aplicação terá de tratar de exceções de contestação de sinistros. Isto aparecerá como MsalServiceException cuja propriedade Claims não estará vazia. Por exemplo, se a política de acesso condicional for ter um dispositivo gerido (Intune), o erro será algo como AADSTS53000: Your device is required to be managed to access this resource ou algo semelhante.

Para lidar com a contestação da reclamação, terá de usar o WithClaims(String) método.

Políticas de Reintento

Consulte Retry-Policy