Freigeben über


Tutorial: Unterstützen von Webfallback

Gilt für: Grüner Kreis mit weißem Häkchen. iOS (Swift) Grüner Kreis mit weißem Häkchen. macOS (Swift)

In diesem Tutorial wird das Beziehen eines Tokens über einen Browser veranschaulicht, wenn die native Authentifizierung nicht ausreicht, um den Benutzerflow abzuschließen.

In diesem Tutorial lernen Sie Folgendes:

  • Überprüfen des Fehlers „BrowserRequired“
  • Behandeln des Fehlers „BrowserRequired“

Voraussetzungen

Browser erforderlich

BrowserRequired ist ein Fallbackmechanismus für verschiedene Szenarien, in denen die native Authentifizierung nicht ausreicht, um den Benutzerflow abzuschließen.

Um die Stabilität Ihrer Anwendung zu gewährleisten und Unterbrechungen des Authentifizierungsflows zu vermeiden, wird dringend empfohlen, die acquireToken()-Methode des SDK zu verwenden, um den Flow im Browser fortzusetzen.

Wenn wir das SDK initialisieren, müssen wir angeben, welche Challenge-Typen unsere Anwendung unterstützen kann. Hier ist die Liste der Aufforderungstypen, die das SDK akzeptiert:

  • OOB (out of band): Fügen Sie diesen Challenge-Typ hinzu, wenn Ihre iOS/macOS-Anwendung einen Einmal-Passcode verarbeiten kann, in diesem Fall einen E-Mail-Code.
  • Kennwort: Fügen Sie diesen Aufforderungstyp hinzu, wenn Ihre Anwendung die kennwortbasierte Authentifizierung verarbeiten kann.

Wenn Microsoft Entra ID Funktionen erfordert, die der Client nicht bereitstellen kann, wird der Fehler BrowserRequired zurückgegeben. Beispiel: Angenommen, wir initialisieren die SDK-Instanz und geben nur den Aufforderungstyp „OOB“ an, aber im Microsoft Entra Admin Center ist die Anwendung mit einem Benutzerflow mit E-Mail und Kennwort konfiguriert. Wenn wir die signUp(username)-Methode über die SDK-Instanz aufrufen, erhalten wir einen BrowserRequired-Fehler, da Microsoft Entra einen anderen Aufforderungstyp (in diesem Fall Kennwort) verlangt als den im SDK konfigurierten.

Ein unzureichender Aufforderungstyp ist nur ein Beispiel für das mögliche Auftreten von BrowserRequired. BrowserRequired ist ein allgemeiner Fallbackmechanismus, der in verschiedenen Szenarien zum Einsatz kommen kann.

Beispielflow

Im folgenden Codeschnipsel sehen Sie, wie Sie die Aufforderungstypen während der Initialisierung der SDK-Instanz angeben können:

nativeAuth = try MSALNativeAuthPublicClientApplication(
    clientId: "<client id>",
    tenantSubdomain: "<tenant subdomain>",
    challengeTypes: [.OOB]
)

In diesem Fall geben wir nur den Aufforderungstyp „OOB“ an. Angenommen, im Microsoft Entra Admin Center ist die Anwendung mit einem Benutzerflow mit E-Mail-Adresse und Kennwort konfiguriert.

nativeAuth.signUp(username: email, delegate: self)

func onSignUpStartError(error: MSAL.SignUpStartError) {
    if error.isBrowserRequired {
        // handle browser required error
    }
}

Wenn wir die signUp(username:delegate)-Methode über die SDK-Instanz aufrufen, erhalten wir einen BrowserRequired-Fehler, da Microsoft Entra einen anderen Aufforderungstyp (in diesem Fall Kennwort) verlangt als den im SDK konfigurierten.

Behandeln des Fehlers „BrowserRequired“

Um diese Art von Fehler zu behandeln, müssen wir einen Browser starten und Benutzern das Ausführen des Authentifizierungsflows darin ermöglichen. Dazu kann die acquireToken()-Methode aufgerufen werden. Um diese Methode verwenden zu können, müssen einige zusätzliche Konfigurationen durchgeführt werden:

Jetzt können wir ein Token und ein Konto interaktiv abrufen. Hier finden Sie ein Beispiel für die Vorgehensweise:

func onSignUpStartError(error: MSAL.SignUpStartError) {
    if error.isBrowserRequired {
        let webviewParams = MSALWebviewParameters(authPresentationViewController: self)
        let parameters = MSALInteractiveTokenParameters(scopes: ["User.Read"], webviewParameters: webviewParams)

        nativeAuth.acquireToken(with: parameters) { (result: MSALResult?, error: Error?) in
            // result will contain account and tokens retrieved in the browser
        }
    }
}

Die zurückgegebenen Token und Konten sind identisch mit denen, die über einen nativen Authentifizierungsflow abgerufen werden.