Självstudie: Stöd för webbreservlösning

Gäller för: vit cirkel med en grå X-symbol. arbetsstyrka-hyresgäster grön cirkel med en vit bockmarkeringssymbol. 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

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:

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.