Eccezioni in MSAL Java

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
    }
}