Tutorial: Unterstützen von Webfallback
Gilt für: iOS (Swift) 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
- Wenn Sie iOS verwenden, folgen Sie den Schritten in Benutzer in einer nativen iOS-Mobilanwendung anmelden.
- Wenn Sie macOS verwenden, folgen Sie den Schritten in Benutzer in der macOS (Swift)-Beispiel-App mit nativer Authentifizierung anmelden.
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:
- Konfigurieren von URL-Schemas in unserem Xcode-Projekt
- Konfigurieren des Umleitungs-URIs im Microsoft Entra Admin Center
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.