Zelfstudie: Ondersteuning voor webterugval
Van toepassing op: iOS (Swift)
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
- Als u iOS gebruikt, volgt u de stappen in Gebruikers aanmelden in een voorbeeldeigen mobiele iOS-toepassing.
- Als u macOS gebruikt, volgt u de stappen in de aanmeldingsgebruikers in de voorbeeldapp macOS (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, 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:
- URL-schema's configureren in ons 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 accounts die worden opgehaald via een systeemeigen verificatiestroom.