Share via


Zelfstudie: Ondersteuning voor webterugval in Android-app

In deze zelfstudie ziet u hoe isBrowserRequired() er een fout optreedt en hoe u deze kunt oplossen. De hulpprogrammamethode isBrowserRequired() controleert de noodzaak van een terugvalmechanisme voor verschillende scenario's waarbij systeemeigen verificatie niet voldoende is om de verificatiestroom op functionele en veilige wijze te voltooien.

In deze zelfstudie leert u het volgende:

  • Cheque isBrowserRequired()
  • Handvat isBrowserRequired()

Vereisten

Terugval op internet

Gebruik een terugvalmechanisme voor web voor scenario's waarbij systeemeigen verificatie niet voldoende is om de gebruikersverificatiestroom te voltooien.

Wanneer u de Android SDK initialiseert, geeft u de uitdagingstypen op die door uw mobiele toepassing worden ondersteund, zoals oob en wachtwoord.

Als uw client-app geen ondersteuning biedt voor een vraagtype dat Microsoft Entra vereist, geeft het antwoord van Microsoft Entra aan dat de client-app moet doorgaan met de verificatiestroom in de browser. U initialiseert bijvoorbeeld de SDK met het type oob-uitdaging , maar in het Microsoft Entra-beheercentrum configureert u de app met een e-mail met wachtwoordverificatiemethode.

In dit geval retourneert de hulpprogrammamethode isBrowserRequired() true.

Voorbeeldstroom

Laten we eens kijken naar een voorbeeldstroom die wordt geretourneerd isBrowserRequired()en hoe u deze kunt afhandelen:

  1. Voeg in het JSON-configuratiebestand dat u tijdens de initialisatie doorgeeft aan de SDK alleen het type oob-uitdaging toe, zoals het volgende codefragment wordt weergegeven:

    PublicClientApplication.createNativeAuthPublicClientApplication( 
        requireContext(), 
        R.raw.native_auth_config  // JSON configuration file 
    ) 
    

    De native_auth_config.json configuratie heeft het volgende codefragment:

    {
      "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. Configureer uw gebruikersstroom in het Microsoft Entra-beheercentrum om e-mail met wachtwoord te gebruiken als verificatiemethode.

  3. Start een registratiestroom met behulp van de methode van signUp(username) de SDK. U krijgt een SignUpError controle die wordt isBrowserRequired() doorgegeven als Microsoft Entra verwacht het wachtwoord en het type oob-uitdaging , maar u hebt uw SDK geconfigureerd met alleen oob.

  4. Gebruik het volgende codefragment om het isBrowserRequired()codefragment te controleren en te verwerken:

    val actionResult = authClient.signUp( 
        username = email 
    ) 
    if (actionResult is SignUpError && actionResult.isBrowserRequired()) { 
        // Handle "browser required" error
    } 
    

    De code geeft aan dat de verificatiestroom niet kan worden voltooid via systeemeigen verificatie en dat een browser moet worden gebruikt.

Handle isBrowserRequired() fout

Als u deze fout wilt afhandelen, moet de client-app een browser starten en de verificatiestroom opnieuw starten. U kunt dit doen met behulp van de MSAL-methode acquireToken() (Microsoft Authentication Library).

Volg hiervoor de volgende stappen:

  1. Als u een omleidings-URI wilt toevoegen aan de app die u eerder hebt geregistreerd, gebruikt u de stappen in Een omleidings-URL voor het platform toevoegen.

  2. Als u het configuratiebestand van uw client-app wilt bijwerken, gebruikt u de stappen in De omleidings-URI configureren in de configuratie van de SDK.

  3. Gebruik het volgende codefragment om een token te verkrijgen met behulp van de acquireToken() methode:

    val actionResult = authClient.signUp(
        username = email
    )
    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.
        )
    } 
    

Beveiligingstokens, dat is id-token, toegangstoken en vernieuwingstoken, u krijgt via de systeemeigen verificatiestroom hetzelfde als het token dat u krijgt via de door de browser gedelegeerde stroom.