Tutorial: Compatibilidad con la reserva web en la aplicación de Android
En este tutorial, se muestra cómo se produce el error isBrowserRequired()
y cómo puede resolverlo. El método de utilidad isBrowserRequired()
comprueba la necesidad de un mecanismo de reserva para varios escenarios en los que la autenticación nativa no es suficiente para completar el flujo de autenticación de manera funcional y segura.
En este tutorial, aprenderá a:
- Comprobar
isBrowserRequired()
- Controlar
isBrowserRequired()
Requisitos previos
- Complete los pasos que se describen en Inicio de sesión de usuarios en una aplicación móvil Android nativa de ejemplo. En este artículo, se muestra cómo ejecutar un ejemplo de Android que configure mediante la configuración del inquilino.
- Complete los pasos descritos en Tutorial: Adición de inicio de sesión y cierre de sesión con el código de acceso de un solo uso de correo electrónico.
Reserva web
Use el mecanismo de reserva web para escenarios en los que la autenticación nativa no es suficiente para completar el flujo de autenticación de usuario.
Al inicializar Android SDK, se especifican los tipos de desafío que admite la aplicación móvil, como oob y password.
Si la aplicación cliente no puede admitir un tipo de desafío requerido por Microsoft Entra, la respuesta de Microsoft Entra indica que la aplicación cliente debe continuar con el flujo de autenticación en el explorador. Por ejemplo, se inicializa el SDK con el tipo de desafío oob, pero en el Centro de administración Microsoft Entra se configura la aplicación con el método de autenticación de correo electrónico con contraseña.
En este caso, el método de utilidad isBrowserRequired()
devuelve true.
Flujo de muestra
Echemos un vistazo a un flujo de ejemplo que devuelve isBrowserRequired()
y cómo puede controlarlo:
En el archivo de configuración JSON, que se pasa al SDK durante la inicialización, agregue solo el tipo de desafío oob, tal y como se muestra en el siguiente fragmento de código:
PublicClientApplication.createNativeAuthPublicClientApplication( requireContext(), R.raw.native_auth_config // JSON configuration file )
La configuración de
native_auth_config.json
tiene el siguiente fragmento de código:{ "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 } }
En el Centro de administración Microsoft Entra, configure el flujo de usuario para usar Correo electrónico con contraseña como método de autenticación.
Inicie un flujo de registro mediante el método
signUp(username)
del SDK. Obtiene un errorSignUpError
que pasa la comprobación deisBrowserRequired()
, ya que Microsoft Entra espera el tipo de desafío password y oob, pero ha configurado el SDK solo con oob.Para comprobar y controlar el
isBrowserRequired()
, use el siguiente fragmento de código:val actionResult = authClient.signUp( username = email ) if (actionResult is SignUpError && actionResult.isBrowserRequired()) { // Handle "browser required" error }
El código indica que el flujo de autenticación no se puede completar mediante la autenticación nativa y que se debe usar un explorador.
Control del error isBrowserRequired()
Para controlar este error, la aplicación cliente debe iniciar un explorador y reiniciar el flujo de autenticación. Puede hacerlo mediante el método acquireToken()
de la Biblioteca de autenticación de Microsoft (MSAL).
Para ello, siga estos pasos:
Para agregar un URI de redirección a la aplicación que registró anteriormente, siga los pasos descritos en Agregar una dirección URL de redireccionamiento de plataforma.
Para actualizar el archivo de configuración de la aplicación cliente, siga los pasos descritos en Configuración del identificador URI de redirección en la configuración del SDK.
Use el siguiente fragmento de código para adquirir un token mediante el método
acquireToken()
:val actionResult = authClient.signUp( username = email ) 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. ) }
Los tokens de seguridad (es decir, el token de identificador, el token de acceso y el token de actualización) que se obtienen mediante el flujo de autenticación nativa son los mismos que el token que se obtiene mediante el flujo delegado del explorador.
Contenido relacionado
- Obtenga información sobre la Ejecución de la aplicación iOS de ejemplo.
- Consulte Referencia de la API de autenticación nativa con un código de acceso de un solo uso de correo electrónico.
- Obtenga información sobre los tipos de desafío.