Zelfstudie: Ondersteuning voor webterugval
Van toepassing op: Werknemershuurders
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
- Als u iOS gebruikt, volgt u de stappen in Gebruikers aanmelden in een voorbeeld van een systeemeigen mobiele iOS-toepassing.
- Als u macOS gebruikt, volgt u de stappen in Gebruikers aanmelden in de voorbeeld-macOS-app (Swift) met behulp van systeemeigen verificatie.
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:
- URL-schema's configureren in het Xcode-project
- de omleidings-URI configureren in het Microsoft Entra-beheercentrum
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.