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.
Ao processar exceções, pode usar o próprio tipo de exceção e o membro ErrorCode para distinguir entre exceções. Existem três tipos de exceções: MsalClientException, , e MsalServiceException, todas herdadas de MsalInteractionRequiredExceptionMsalException.
- MsalClientException é gerada quando ocorre um erro local à biblioteca ou ao dispositivo.
- O MsalServiceException é lançado quando o serviço STS devolve uma resposta de erro ou ocorre outro erro de rede.
- O MsalInteractionRequiredException é lançado quando é necessária interação com a interface para que a autenticação tenha sucesso.
MsalServiceException
A MsalServiceException expõe os cabeçalhos HTTP devolvidos nos pedidos ao STS. Pode aceder a eles através de MsalServiceException.headers()
MsalInteractionRequiredException
Um dos códigos de estado comuns devolvidos pelo MSAL4J ao chamar AcquireTokenSilently() é InvalidGrantError. Este código de estado significa que a aplicação deve chamar novamente a biblioteca de autenticação, mas em modo interativo (usando AuthorizationCodeParameters ou DeviceCodeParameters para aplicações clientes públicas). Isto deve-se ao facto de ser necessária uma interação adicional do utilizador antes de poder emitir um token de autenticação.
Na maioria das vezes, quando o AcquireTokenSilently falha, é porque a cache de tokens não tem tokens que correspondam ao seu pedido. Os tokens de acesso expiram em 1 hora, e a AcquireTokenSilently tenta obter um novo com base num token de atualização (em termos OAuth2, este é o fluxo de "Token de Atualização"). Este fluxo também pode falhar por várias razões, por exemplo, se um administrador de inquilino configurar políticas de login mais rigorosas.
A interação visa que o utilizador realize uma ação. Algumas dessas condições são fáceis de resolver pelos utilizadores (por exemplo, aceitar os Termos de Uso com um único clique), e outras não podem ser resolvidas com a configuração atual (por exemplo, a máquina em questão precisa de se ligar a uma rede corporativa específica).
O MSAL expõe um reason campo, que pode ler para proporcionar uma melhor experiência ao utilizador, por exemplo, para informar o utilizador que a sua palavra-passe expirou ou que terá de dar consentimento para usar alguns recursos. Os valores suportados fazem parte do enum InteractionRequiredExceptionReason:
| Reason | Meaning | Utilização recomendada |
|---|---|---|
| BasicAction | A condição pode ser resolvida pela interação do utilizador durante o fluxo interativo de autenticação | Call acquireToken com parâmetros interativos |
| Ação Adicional | A condição pode ser resolvida por interação corretiva adicional com o sistema, fora do fluxo interativo de autenticação. | Chame o acquireToken com parâmetros interativos para mostrar uma mensagem que explique a ação de remediação. A aplicação de chamada pode optar por ocultar fluxos que requerem ação adicional se for pouco provável que o utilizador conclua a ação corretiva. |
| Apenas mensagem | A condição não pode ser resolvida neste momento. Ao iniciar o fluxo interativo de autenticação, aparecerá uma mensagem a explicar a condição. | Chame acquireToken com parâmetros interativos para mostrar uma mensagem que explica a condição. acquireTokenCall devolverá o erro UserCanceled depois de o utilizador ler a mensagem e fechar a janela. A aplicação de chamada pode optar por ocultar fluxos que tenham como resultado message_only se for pouco provável que o utilizador beneficie da mensagem. |
| Consentimento Requerido | O consentimento do utilizador está em falta ou foi revogado. | Chame todas as funções acquireToken com parâmetros interativos para que o utilizador possa dar o seu consentimento. |
| UserPasswordExpired | A palavra-passe do utilizador expirou. | ChameAcquireToken com parâmetro interativo para que o utilizador possa redefinir a palavra-passe |
| Consentimento Requerido | O consentimento do utilizador está em falta ou foi revogado | Call acquireToken com parâmetros interativos para que o utilizador possa redefinir a palavra-passe |
| None | Não são fornecidos mais detalhes. A condição pode ser resolvida pela interação do utilizador durante o fluxo interativo de autenticação. | Chamar acquireToken com parâmetros interativos |
Exemplo de código
IAuthenticationResult result;
try {
PublicClientApplication application = PublicClientApplication
.builder("clientId")
.b2cAuthority("authority")
.build();
SilentParameters parameters = SilentParameters
.builder(Collections.singleton("scope"))
.build();
result = application.acquireTokenSilently(parameters).join();
}
catch (Exception ex){
if(ex instanceof MsalInteractionRequiredException){
// AcquireToken by either AuthorizationCodeParameters or DeviceCodeParameters
} else{
// Log and handle exception accordingly
}
}