Tutorial: Suporte a fallback da Web no aplicativo Android

Este tutorial demonstra como isBrowserRequired() o erro acontece e como você pode resolvê-lo. O método isBrowserRequired() utilitário verifica a necessidade de um mecanismo de fallback para vários cenários em que a autenticação nativa não é suficiente para concluir o fluxo de autenticação de maneira funcional e segura.

Neste tutorial, irá aprender a:

  • Verificar isBrowserRequired()
  • Pega isBrowserRequired()

Pré-requisitos

  • Conclua as etapas em Entrar usuários em um aplicativo móvel Android nativo de exemplo. Este artigo mostra como executar um exemplo de Android que você configura usando as configurações do locatário.
  • Conclua as etapas em Tutorial: Adicionar login e sair com senha única de e-mail.

Fallback da Web

Use o mecanismo de fallback da Web para cenários em que a autenticação nativa não é suficiente para concluir o fluxo de autenticação do usuário.

Ao inicializar o SDK do Android, você especifica os tipos de desafio suportados pelo seu aplicativo móvel, como oob e senha.

Se o seu aplicativo cliente não puder suportar um tipo de desafio exigido pelo Microsoft Entra, a resposta do Microsoft Entra indica que o aplicativo cliente precisa continuar com o fluxo de autenticação no navegador. Por exemplo, você inicializa o SDK com o tipo de desafio oob , mas no centro de administração do Microsoft Entra você configura o aplicativo com um e-mail com método de autenticação de senha.

Nesse caso, o método isBrowserRequired() utilitário retorna true.

Fluxo da amostra

Vejamos um exemplo de fluxo que retorna isBrowserRequired()e como você pode lidar com ele:

  1. No arquivo de configuração JSON, que você passa para o SDK durante a inicialização, adicione apenas o tipo de desafio oob , conforme mostrado no seguinte trecho de código:

    PublicClientApplication.createNativeAuthPublicClientApplication( 
        requireContext(), 
        R.raw.native_auth_config  // JSON configuration file 
    ) 
    

    A native_auth_config.json configuração tem o seguinte trecho 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. No centro de administração do Microsoft Entra, configure seu fluxo de usuário para usar Email com senha como método de autenticação.

  3. Inicie um fluxo de inscrição usando o método do signUp(username) SDK. Você obtém um SignUpError que passa na isBrowserRequired() verificação como o Microsoft Entra espera senha e tipo de desafio oob, mas você configurou seu SDK com apenas oob.

  4. Para verificar e manipular o isBrowserRequired(), use o seguinte trecho de código:

    val actionResult = authClient.signUp( 
        username = email 
    ) 
    if (actionResult is SignUpError && actionResult.isBrowserRequired()) { 
        // Handle "browser required" error
    } 
    

    O código indica que o fluxo de autenticação não pode ser concluído por meio de autenticação nativa e que um navegador deve ser usado.

Erro Handle isBrowserRequired()

Para lidar com esse erro, o aplicativo cliente precisa iniciar um navegador e reiniciar o fluxo de autenticação. Você pode fazer isso usando o método Microsoft Authentication Library (MSAL). acquireToken()

Para fazê-lo, siga os seguintes passos:

  1. Para adicionar um URI de redirecionamento ao aplicativo registrado anteriormente, use as etapas em Adicionar uma URL de redirecionamento de plataforma.

  2. Para atualizar o arquivo de configuração do aplicativo cliente, use as etapas em Configurar o URI de redirecionamento na configuração do SDK.

  3. Use o seguinte trecho de código para adquirir um token usando o acquireToken() método:

    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.
        )
    } 
    

Os tokens de segurança, ou seja, token de ID, token de acesso e token de atualização, que você obtém através do fluxo de autenticação nativa são os mesmos que o token obtido por meio do fluxo delegado do navegador.