Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Durante l'elaborazione delle eccezioni, è possibile usare il tipo di eccezione stesso e il membro ErrorCode per distinguere le eccezioni. Esistono tre tipi di eccezioni: MsalClientException, MsalServiceExceptione MsalInteractionRequiredException, che ereditano da MsalException.
- MsalClientException viene generata quando si verifica un errore locale per la libreria o il dispositivo.
- MsalServiceException viene generata quando il servizio STS restituisce una risposta di errore o si verifica un altro errore di rete.
- MsalInteractionRequiredException viene generata quando l'interazione dell'interfaccia utente è necessaria per consentire l'esito positivo dell'autenticazione.
MsalServiceException
MsalServiceException espone le intestazioni HTTP restituite in risposta alle richieste all'STS. È possibile accedervi tramite MsalServiceException.headers()
MsalInteractionRequiredException
Uno dei codici di stato comuni restituiti da MSAL4J quando si chiama AcquireTokenSilently() è InvalidGrantError. Questo codice di stato indica che l'applicazione deve chiamare di nuovo la libreria di autenticazione, ma in modalità interattiva (uso di AuthorizationCodeParameters o DeviceCodeParameters per le applicazioni client pubbliche). Ciò è dovuto al fatto che è necessaria un'interazione utente aggiuntiva prima di poter emettere un token di autenticazione.
La maggior parte del tempo in cui AcquireTokenSilently ha esito negativo, perché la cache dei token non dispone di token corrispondenti alla richiesta. I token di accesso scadono entro 1 ora e AcquireTokenSilently tenterà di recuperare un nuovo token in base a un token di aggiornamento (in termini OAuth2, si tratta del flusso del "token di aggiornamento"). Questo flusso può anche non riuscire per diversi motivi, ad esempio se un amministratore tenant configura criteri di accesso più rigorosi.
L'interazione mira a indurre l'utente a compiere un'azione. Alcune di queste condizioni sono facili da risolvere (ad esempio, accettare condizioni per l'utilizzo con un solo clic) e alcune non possono essere risolte con la configurazione corrente (ad esempio, il computer in questione deve connettersi a una rete aziendale specifica).
MSAL espone un reason campo, che è possibile leggere per offrire un'esperienza utente migliore, ad esempio per indicare all'utente che la password è scaduta o che dovrà fornire il consenso per usare alcune risorse. I valori supportati fanno parte dell'enumerazione InteractionRequiredExceptionReason:
| Ragione | Meaning | Gestione consigliata |
|---|---|---|
| BasicAction | La condizione può essere risolta dall'interazione dell'utente durante il flusso di autenticazione interattiva | Chiamare acquireToken con parametri interattivi |
| Azione aggiuntiva | La condizione può essere risolta tramite un'interazione correttiva aggiuntiva con il sistema, all'esterno del flusso di autenticazione interattiva. | Chiamare acquireToken con parametri interattivi per visualizzare un messaggio che spiega l'azione correttiva. L'applicazione chiamante può scegliere di nascondere i flussi che richiedono additional_action se è improbabile che l'utente completi l'azione correttiva. |
| MessageOnly | La condizione non può essere risolta in questo momento. L'avvio del flusso di autenticazione interattiva mostrerà un messaggio che spiega la condizione. | Chiamare acquireToken con parametri interattivi per visualizzare un messaggio che spiega la condizione. acquireTokenCall restituirà l'errore UserCanceled dopo che l'utente legge il messaggio e chiude la finestra. L'applicazione chiamante può scegliere di nascondere i flussi che generano message_only se è improbabile che l'utente tragga vantaggio dal messaggio. |
| Consenso richiesto | Il consenso dell'utente è mancante o è stato revocato. | Chiamare all acquireToken con parametri interattivi per consentire all'utente di fornire il consenso. |
| Password utente scaduta | La password dell'utente è scaduta. | Chiamare acquireToken con il parametro interattivo in modo che l'utente possa reimpostare la password |
| Consenso richiesto | Il consenso dell'utente è mancante o è stato revocato | Chiamare acquireToken con parametri interattivi in modo che l'utente possa reimpostare la password |
| Nessuno | Non vengono forniti altri dettagli. La condizione può essere risolta dall'interazione dell'utente durante il flusso di autenticazione interattiva. | Chiamare acquireToken con parametri interattivi |
Esempio di codice
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
}
}