Delen via


Zelfstudie: Ondersteuning voor webterugval

Van toepassing op: Witte cirkel met een grijs X-symbool. Werknemershuurders Groene cirkel met een wit vinkje. Externe huurders (meer informatie)

Deze tutorial laat zien hoe u een token verkrijgt via een browser waarbij interne of ingevoegde verificatie niet voldoende is om het gebruikersproces te voltooien.

In deze zelfstudie leert u het volgende:

  • Controleer de fout BrowserRequired.
  • Behandel de BrowserRequired-fout.

Voorwaarden

Browser vereist

BrowserRequired is een terugvalmechanisme voor verschillende scenario's waarbij systeemeigen verificatie niet voldoende is om de gebruikersstroom te voltooien.

Om de stabiliteit van uw toepassing te garanderen en onderbreking van de verificatiestroom te voorkomen, is het raadzaam de acquireToken() methode van de SDK te gebruiken om de stroom in de browser voort te zetten.

Wanneer we de SDK initialiseren, moeten we opgeven welke uitdagingstypen onze toepassing kan ondersteunen. Hier volgt een lijst met uitdagingstypen die door de SDK worden geaccepteerd:

  • OOB (out-of-band): voeg dit vraagtype toe wanneer uw iOS-/macOS-toepassing een eenmalige wachtwoordcode kan verwerken, in dit geval een e-mailcode.
  • Wachtwoord: voeg dit vraagtype toe wanneer uw toepassing verificatie op basis van wachtwoorden kan afhandelen.

Wanneer Microsoft Entra mogelijkheden vereist die de client niet kan bieden, wordt de fout BrowserRequired geretourneerd. Stel dat we het SDK-exemplaar initialiseren waarbij alleen de challenge type OOB wordt opgegeven, maar in het Microsoft Entra-beheercentrum is de toepassing geconfigureerd met een Email met wachtwoord gebruikersstroom. Wanneer we de signUp(username) methode aanroepen van het SDK-exemplaar, krijgen we een BrowserRequired fout, omdat Microsoft Entra een ander vraagtype (wachtwoord in dit geval) vereist dan het type dat is geconfigureerd in de SDK.

Onvoldoende uitdagingstype is slechts één voorbeeld van wanneer BrowserRequired kan optreden. BrowserRequired is een algemeen terugvalmechanisme dat in verschillende scenario's kan plaatsvinden.

Voorbeeldstroom

In het volgende codefragment ziet u hoe u de vraagtypen kunt opgeven tijdens de initialisatie van het SDK-exemplaar:

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

In dit geval geven we alleen het vraagtype OOB op. Stel dat de toepassing in het Microsoft Entra-beheercentrum is geconfigureerd met een -e-mail met wachtwoord gebruikersstroom.

let parameters = MSALNativeAuthSignUpParameters(username: email)
nativeAuth.signUp(parameters: parameters, delegate: self)

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

Wanneer we de signUp(parameters:delegate) methode aanroepen van het SDK-exemplaar, krijgen we een BrowserRequired fout, omdat Microsoft Entra een ander vraagtype (wachtwoord in dit geval) vereist dan het type dat is geconfigureerd in de SDK.

De fout BrowserRequired afhandelen

Als u dit soort fouten wilt afhandelen, moet u een browser starten en de gebruiker daar de verificatiestroom laten uitvoeren. U kunt dit doen door acquireToken() methode aan te roepen. Als u deze methode wilt gebruiken, moeten enkele extra configuraties worden uitgevoerd:

Nu kunnen we een token en een account interactief ophalen. Hier volgt een voorbeeld van hoe u dit doet:

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

De tokens en het account dat worden geretourneerd, zijn identiek aan de tokens en het account die worden opgehaald via een systeemeigen verificatiestroom.