Condividi tramite


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

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:

  1. 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
      }
    } 
    
  2. Nell'interfaccia di amministrazione di Microsoft Entra configurare il flusso utente in modo che usi Posta elettronica con password come metodo di autenticazione.

  3. Avviare un flusso di iscrizione usando il metodo signUp(parameters) dell'SDK. Si ottiene un errore SignUpError che supera la verifica isBrowserRequired() perché Microsoft Entra prevede il tipo di test password e oob, ma l'SDK è stato configurato solo con oob.

  4. 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:

  1. Per aggiungere un URI di reindirizzamento all'app registrata in precedenza, usare la procedura descritta in Aggiungere un URL di reindirizzamento della piattaforma.

  2. Per aggiornare il file di configurazione dell'app client, usare la procedura descritta in Configurare l'URI di reindirizzamento nella configurazione dell'SDK.

  3. 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.