Esercitazione: Supportare il fallback Web nell'app Android
Questa esercitazione illustra come si verifica l'errore isBrowserRequired()
e come risolverlo. Il metodo di utilità isBrowserRequired()
verifica se è necessario un meccanismo di fallback per scenari in cui l'autenticazione nativa si rivela insufficiente per completare il flusso di autenticazione in modo funzionale e sicuro.
In questa esercitazione apprenderai a:
- Controllare
isBrowserRequired()
- Gestire
isBrowserRequired()
Prerequisiti
- Completare la procedura descritta in Consentire agli utenti di accedere in un'applicazione per dispositivi mobili Android nativa di esempio. Questo articolo illustra come eseguire un'applicazione Android di esempio configurata con le impostazioni del tenant.
- Completare la procedura descritta in Esercitazione: Aggiungere l'accesso e la disconnessione con passcode monouso tramite posta elettronica.
Fallback Web
Usare il meccanismo di fallback Web per scenari in cui l'autenticazione nativa si rivela insufficiente per completare il flusso di autenticazione utente.
Quando si inizializza Android SDK, si specificano i tipi di test supportati dall'applicazione per dispositivi mobili, ad esempio oob e password.
Se l'app client non supporta un tipo di test richiesto da Microsoft Entra, la risposta di Microsoft Entra indica che l'app client deve continuare con il flusso di autenticazione nel browser. Ad esempio, si inizializza l'SDK con il tipo di test oob, ma nell'interfaccia di amministrazione di Microsoft Entra si configura l'app con il metodo di autenticazione Posta elettronica con password.
In questo caso, il metodo di utilità isBrowserRequired()
restituisce true.
Flusso di esempio
Si esaminerà ora un flusso di esempio che restituisce isBrowserRequired()
e si vedrà come gestirlo:
Nel file di configurazione JSON, passato all'SDK durante l'inizializzazione, aggiungere solo il tipo di test oob come illustrato nel frammento di codice seguente:
PublicClientApplication.createNativeAuthPublicClientApplication( requireContext(), R.raw.native_auth_config // JSON configuration file )
La configurazione
native_auth_config.json
include il frammento di codice seguente:{ "client_id" : "{Enter_the_Application_Id_Here}", "authorities" : [ { "type": "CIAM", "authority_url": "https://{Enter_the_Tenant_Subdomain_Here}.ciamlogin.com/{Enter_the_Tenant_Subdomain_Here}.onmicrosoft.com/" } ], "challenge_types" : ["oob"], "logging": { "pii_enabled": false, "log_level": "INFO", "logcat_enabled": true } }
Nell'interfaccia di amministrazione di Microsoft Entra configurare il flusso utente in modo che usi Posta elettronica con password come metodo di autenticazione.
Avviare un flusso di iscrizione usando il metodo
signUp(parameters)
dell'SDK. Si ottiene un erroreSignUpError
che supera la verificaisBrowserRequired()
perché Microsoft Entra prevede il tipo di test password e oob, ma l'SDK è stato configurato solo con oob.Per controllare e gestire
isBrowserRequired()
, usare il frammento di codice seguente:val parameters = NativeAuthSignUpParameters(username = email) val actionResult: SignUpResult = authClient.signUp(parameters) if (actionResult is SignUpError && actionResult.isBrowserRequired()) { // Handle "browser required" error }
Il codice indica che non è possibile completare il flusso di autenticazione tramite l'autenticazione nativa e che si deve usare un browser.
Gestire l'errore isBrowserRequired()
Per gestire questo errore, l'app client deve avviare un browser e riavviare il flusso di autenticazione. È possibile eseguire questa operazione usando il metodo acquireToken()
di Microsoft Authentication Library (MSAL).
A tale scopo, seguire questa procedura:
Per aggiungere un URI di reindirizzamento all'app registrata in precedenza, usare la procedura descritta in Aggiungere un URL di reindirizzamento della piattaforma.
Per aggiornare il file di configurazione dell'app client, usare la procedura descritta in Configurare l'URI di reindirizzamento nella configurazione dell'SDK.
Usare il frammento di codice seguente per acquisire un token usando il metodo
acquireToken()
:val parameters = NativeAuthSignUpParameters(username = email) val actionResult: SignUpResult = authClient.signUp(parameters) if (actionResult is SignUpError && actionResult.isBrowserRequired()) { authClient.acquireToken( AcquireTokenParameters( AcquireTokenParameters.Builder() .startAuthorizationFromActivity(requireActivity()) .withScopes(getScopes()) .withCallback(getAuthInteractiveCallback()) ) // Result will contain account and tokens retrieved through the browser. ) }
I token di sicurezza, ovvero token ID, token di accesso e token di aggiornamento, ottenuti tramite il flusso di autenticazione nativa sono uguali al token ottenuto tramite il flusso delegato dal browser.
Contenuto correlato
- Informazioni su come eseguire l'app iOS di esempio
- Esplorare le informazioni di riferimento API di autenticazione nativa con passcode monouso tramite posta elettronica.
- Informazioni sui tipi di test.