Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:
arbetsstyrka-hyresgäster
externa hyresgäster (lära dig mer)
Den här handledningen visar hur du hämtar en token via en webbläsare där inbyggd autentisering inte räcker för att slutföra användarflödet.
I den här handledningen kommer du att:
- Kontrollera felkoden BrowserRequired.
- Hantera "BrowserRequired"-fel.
Förutsättningar
- Om du använder iOS följer du stegen i Logga in användare i ett exempel på ett internt iOS-mobilprogram.
- Om du använder macOS följer du stegen i Logga in användare i exempelappen macOS (Swift) med inbyggd autentisering.
Webbläsare krävs
BrowserRequired är en reservmekanism för olika scenarier där intern autentisering inte räcker för att slutföra användarflödet.
För att säkerställa programmets stabilitet och undvika avbrott i autentiseringsflödet rekommenderar vi starkt att du använder SDK:s acquireToken() metod för att fortsätta flödet i webbläsaren.
När vi initierar SDK måste vi ange vilka utmaningstyper som vårt program kan stödja. Här är listan över utmaningstyper som SDK accepterar:
- OOB (out of band): Lägg till den här utmaningstypen när ditt iOS/macOS-program kan hantera ett engångslösenord, i det här fallet en e-postkod.
- Lösenord: Lägg till den här utmaningstypen när ditt program kan hantera lösenordsbaserad autentisering.
När Microsoft Entra kräver funktioner som klienten inte kan ange returneras felet BrowserRequired. Anta till exempel att vi initierar SDK-instansen och endast anger utmaningstypen OOB, men i administrationscentret för Microsoft Entra konfigureras programmet med ett e-postmeddelande med lösenord användarflöde. När vi anropar metoden signUp(username) från SDK-instansen får vi ett BrowserRequired fel eftersom Microsoft Entra kräver en annan utmaningstyp (lösenord i det här fallet) än den som konfigurerats i SDK.
Otillräcklig utmaningstyp är bara ett exempel på när BrowserRequired kan inträffa.
BrowserRequired är en allmän reservmekanism som kan inträffa i olika scenarier.
Exempelflöde
I följande kodfragment kan du se hur du kan ange utmaningstyperna under initieringen av SDK-instansen:
nativeAuth = try MSALNativeAuthPublicClientApplication(
clientId: "<client id>",
tenantSubdomain: "<tenant subdomain>",
challengeTypes: [.OOB]
)
I det här fallet anger vi bara utmaningstypen OOB. Anta att programmet i administrationscentret för Microsoft Entra är konfigurerat med ett e-postmeddelande med lösenord användarflöde.
let parameters = MSALNativeAuthSignUpParameters(username: email)
nativeAuth.signUp(parameters: parameters, delegate: self)
func onSignUpStartError(error: MSAL.SignUpStartError) {
if error.isBrowserRequired {
// handle browser required error
}
}
När vi anropar metoden signUp(parameters:delegate) från SDK-instansen får vi ett BrowserRequired fel, eftersom Microsoft Entra kräver en annan utmaningstyp (lösenord i det här fallet) än den som konfigurerats i SDK.
Hantera BrowserRequired-felmeddelande
För att hantera den här typen av fel måste vi starta en webbläsare och låta användaren utföra autentiseringsflödet där. Detta kan göras genom att anropa metoden acquireToken(). För att kunna använda den här metoden måste några ytterligare konfigurationer göras:
- Konfigurera URL-scheman i vårt Xcode-projekt
- Konfigurera omdirigerings-URI:n i administrationscentret för Microsoft Entra
Nu kan vi hämta en token och ett konto interaktivt. Här är ett exempel på hur du gör det:
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
}
}
}
Token och kontot som returneras är identiska med de som skulle hämtas via ett internt autentiseringsflöde.