Freigeben über


Tutorial: Unterstützung für Webfallback in einer Android-App

In diesem Lernprogramm wird veranschaulicht, wie isBrowserRequired()-Fehler auftreten und wie Sie diese beheben können. Die Hilfsmethode isBrowserRequired() unterstützt den Bedarf an einem Fallbackmechanismus für verschiedene Szenarien, in denen die native Authentifizierung nicht ausreicht, um den Flow auf funktionale und sichere Weise abzuschließen.

In diesem Tutorial lernen Sie Folgendes:

  • Überprüfen von isBrowserRequired()
  • Behandeln von isBrowserRequired()

Voraussetzungen

Web-Fallback

Verwenden Sie den Web-Fallbackmechanismus für Szenarien, in denen die native Authentifizierung nicht ausreicht, um den Benutzerauthentifizierungsflow abzuschließen.

Wenn Sie das Android SDK initialisieren, geben Sie die von Ihrer mobilen Anwendung unterstützten Aufforderungstypen an, z. B. oob und password.

Wenn Ihre Client-App einen von Microsoft Entra geforderten Aufforderungstyp nicht unterstützen kann, gibt die Antwort von Microsoft Entra an, dass die Client-App den Authentifizierungsflow im Browser fortsetzen muss. Beispielsweise initialisieren Sie das SDK mit dem Aufforderungstyp oob, aber im Microsoft Entra Admin Center konfigurieren Sie die App mit einer Authentifizierungsmethode „E-Mail mit Kennwort“.

In diesem Fall gibt die Hilfsmethode isBrowserRequired() „true“ zurück.

Beispielflow

Sehen wir uns einen Beispielflow an, der isBrowserRequired() zurückgibt, und wie Sie damit umgehen können:

  1. Fügen Sie in der JSON-Konfigurationsdatei, die Sie während der Initialisierung an das SDK übergeben, nur den Aufforderungstyp oob hinzu, wie im folgenden Codeschnipsel dargestellt:

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

    Die native_auth_config.json-Konfiguration hat den folgenden Codeschnipsel:

    {
      "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. Konfigurieren Ihren Benutzerfluss Sie im Microsoft Entra Admin Center so, dass Email mit Kennwort als Authentifizierungsmethode verwendet wird.

  3. Starten Sie einen Registrierungsflow mithilfe der SDK-Methode signUp(username). Sie erhalten einen SignUpError, der die isBrowserRequired()-Überprüfung besteht, da Microsoft Entra den Aufforderungstyp password und oob erwartet, aber Sie haben Ihr SDK nur mit oob konfiguriert.

  4. Verwenden Sie zur Prüfung und Behandlung von isBrowserRequired() den folgenden Codeschnipsel:

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

    Der Code zeigt an, dass der Authentifizierungsflow nicht über native Authentifizierungs-SDK- oder API-Methoden abgeschlossen werden kann und ein Browser verwendet werden muss.

Behandeln des isBrowserRequired()-Fehlers

Um diesen Fehler zu behandeln, muss die Client-App einen Browser aufrufen und den Authentifizierungsflow neu starten. Sie können die acquireToken()-Methode der Microsoft Authentication Library (MSAL) verwenden.

Führen Sie dazu die folgenden Schritte aus:

  1. Wenn Sie der zuvor registrierten App einen Umleitungs-URI hinzufügen möchten, führen Sie die Schritte unter Hinzufügen einer Plattformumleitungs-URL aus.

  2. Um die Konfigurationsdatei Ihrer Client-App zu aktualisieren, führen Sie die Schritte unter Konfigurieren des Umleitungs-URI in der Konfiguration des SDK aus.

  3. Verwenden Sie den folgenden Codeschnipsel, um ein Token mithilfe der acquireToken()-Methode abzurufen:

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

Sicherheitstoken, d. h. ID-Token, Zugriffstoken und Aktualisierungstoken, die Sie über den nativen Authentifizierungsflow erhalten, sind identisch mit dem Token, das Sie über den an den Browser delegierten Flow erhalten.