Självstudie: Stöd för webbåterställning i Android-app
Den här självstudien visar hur isBrowserRequired()
fel inträffar och hur du kan lösa det. Verktygsmetoden isBrowserRequired()
kontrollerar behovet av en återställningsmekanism för olika scenarier där intern autentisering inte räcker för att slutföra autentiseringsflödet på ett funktionellt och säkert sätt.
I den här självstudien lär du dig att:
- Check
isBrowserRequired()
- Handtag
isBrowserRequired()
Förutsättningar
- Slutför stegen i Logga in användare i ett exempel på ett internt Android-mobilprogram. Den här artikeln visar hur du kör ett Android-exempel som du konfigurerar med hjälp av klientinställningarna.
- Slutför stegen i Självstudie: Lägg till inloggning och logga ut med engångslösenord för e-post.
Webbåterställning
Använd återställningsmekanismen för webben för scenarier där intern autentisering inte räcker för att slutföra användarautentiseringsflödet.
När du initierar Android SDK anger du de utmaningstyper som ditt mobilprogram stöder, till exempel oob och lösenord.
Om klientappen inte kan stödja en utmaningstyp som Microsoft Entra kräver anger Microsoft Entras svar att klientappen måste fortsätta med autentiseringsflödet i webbläsaren. Du initierar till exempel SDK med oob-utmaningstypen , men i administrationscentret för Microsoft Entra konfigurerar du appen med ett e-postmeddelande med en lösenordsautentiseringsmetod.
I det här fallet returnerar verktygsmetoden isBrowserRequired()
true.
Exempelflöde
Nu ska vi titta på ett exempelflöde som returnerar isBrowserRequired()
och hur du kan hantera det:
I JSON-konfigurationsfilen, som du skickar till SDK:n under initieringen, lägger du bara till oob-utmaningstypen enligt följande kodfragment:
PublicClientApplication.createNativeAuthPublicClientApplication( requireContext(), R.raw.native_auth_config // JSON configuration file )
Konfigurationen
native_auth_config.json
har följande kodfragment:{ "client_id" : "{Enter_the_Application_Id_Here}", "authorities" : [ { "type": "CIAM", "authority_url": "https://{Enter_the_Tenant_Subdomain_Here}.ciamlogin.com/{Enter_the_Tenant_Subdomain_Here}.onmicrosoft.com/" } ], "challenge_types" : ["oob"], "logging": { "pii_enabled": false, "log_level": "INFO", "logcat_enabled": true } }
I administrationscentret för Microsoft Entra konfigurerar du ditt användarflöde så att e-post med lösenord används som autentiseringsmetod.
Starta ett registreringsflöde med hjälp av SDK:s
signUp(parameters)
metod. Du får enSignUpError
som klararisBrowserRequired()
kontrollen eftersom Microsoft Entra förväntar sig lösenord och oob utmaningstyp, men du konfigurerade din SDK med endast oob.Om du vill kontrollera och hantera
isBrowserRequired()
använder du följande kodfragment:val parameters = NativeAuthSignUpParameters(username = email) val actionResult: SignUpResult = authClient.signUp(parameters) if (actionResult is SignUpError && actionResult.isBrowserRequired()) { // Handle "browser required" error }
Koden anger att autentiseringsflödet inte kan slutföras via intern autentisering och att en webbläsare måste användas.
Hantera isBrowserRequired()-fel
För att hantera det här felet måste klientappen starta en webbläsare och starta om autentiseringsflödet. Du kan göra det med hjälp av msal-metoden (Microsoft Authentication Library). acquireToken()
Gör det med hjälp av följande steg:
Om du vill lägga till en omdirigerings-URI till den app som du registrerade tidigare använder du stegen i Lägg till en omdirigerings-URL för plattformen.
Om du vill uppdatera klientappens konfigurationsfil använder du stegen i Konfigurera omdirigerings-URI:n i SDK:ns konfiguration.
Använd följande kodfragment för att hämta en token med hjälp
acquireToken()
av metoden:val parameters = NativeAuthSignUpParameters(username = email) val actionResult: SignUpResult = authClient.signUp(parameters) if (actionResult is SignUpError && actionResult.isBrowserRequired()) { authClient.acquireToken( AcquireTokenParameters( AcquireTokenParameters.Builder() .startAuthorizationFromActivity(requireActivity()) .withScopes(getScopes()) .withCallback(getAuthInteractiveCallback()) ) // Result will contain account and tokens retrieved through the browser. ) }
Säkerhetstoken, som är ID-token, åtkomsttoken och uppdateringstoken, du får via det interna autentiseringsflödet är samma som den token som du får via webbläsardelegeringsflödet.
Relaterat innehåll
- Lär dig hur du kör iOS-exempelappen
- Utforska API-referens för intern autentisering med engångslösenord för e-post.
- Lär dig mer om utmaningstyper.