Delen via


Zelfstudie: Ondersteuning voor webterugval

Van toepassing op: Groene cirkel met een wit vinkje. iOS (Swift) Groene cirkel met een wit vinkje. macOS (Swift)

Deze zelfstudie laat zien hoe u een token verkrijgt via een browser waarbij systeemeigen verificatie niet voldoende is om de gebruikersstroom te voltooien.

In deze zelfstudie leert u het volgende:

  • Controleer de fout BrowserRequired.
  • Handle BrowserRequired error.

Vereisten

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, wordt het ten zeerste aanbevolen om de methode van acquireToken() 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 opgeven, wordt de BrowserRequired fout geretourneerd. Stel dat we het SDK-exemplaar initialiseren dat alleen het vraagtype OOB opgeeft, maar in het Microsoft Entra-beheercentrum wordt de toepassing geconfigureerd met een e-mail met gebruikersstroom voor wachtwoorden . Wanneer we de methode signUp(username) aanroepen van het SDK-exemplaar, krijgen we een BrowserRequired foutmelding omdat Microsoft Entra een ander vraagtype (wachtwoord in dit geval) vereist dan het type dat is geconfigureerd in de SDK.

Onvoldoende type uitdaging is slechts één voorbeeld van wanneer BrowserRequired dit kan gebeuren. 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 gebruikersstroom voor wachtwoorden .

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 vanuit het SDK-exemplaar, krijgen we een BrowserRequired foutmelding omdat Microsoft Entra een ander vraagtype (wachtwoord in dit geval) vereist dan het type dat is geconfigureerd in de SDK.

Fout BrowserRequired afhandelen

Als u dit soort fouten wilt afhandelen, moet u een browser starten en de gebruiker daar de verificatiestroom laten uitvoeren. Dit kan worden gedaan door de methode aan te roepen acquireToken() . 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 accounts die worden opgehaald via een systeemeigen verificatiestroom.