Compartir a través de


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

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:

  1. 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
      }
    } 
    
  2. 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.

  3. Inicie un flujo de registro mediante el método signUp(username) del SDK. Obtiene un error SignUpError que pasa la comprobación de isBrowserRequired(), ya que Microsoft Entra espera el tipo de desafío password y oob, pero ha configurado el SDK solo con oob.

  4. 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:

  1. 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.

  2. 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.

  3. 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.