Compartilhar via


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 utilitário isBrowserRequired() 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, você aprenderá a:

  • Confira isBrowserRequired()
  • Lidar com isBrowserRequired()

Pré-requisitos

Fallback da Web

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

Ao inicializar o SDK do Android, especifique os tipos de desafio aos quais seu aplicativo móvel dá suporte, como oob e senha.

Se o aplicativo cliente não puder dar suporte a um tipo de desafio exigido pelo Microsoft Entra, a resposta do Microsoft Entra indicará 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 email com o método de autenticação de senha.

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

Fluxo de exemplos

Vamos examinar um fluxo de exemplo 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 configuração native_auth_config.json 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 o método de autenticação.

  3. Inicie um fluxo de inscrição usando o método signUp(username) do SDK. Você obtém um SignUpError que passa na verificação isBrowserRequired(), pois o Microsoft Entra espera um tipo de verificação senha e oob, mas você configurou seu SDK apenas com 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 da autenticação nativa e que um navegador deve ser usado.

Lidar com o erro isBrowserRequired()

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

Para fazer isso, execute as seguintes etapas:

  1. Para adicionar um URI de redirecionamento ao aplicativo que você registrou 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 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.
        )
    } 
    

Os tokens de segurança, que são token de ID, token de acesso e token de atualização, obtidos por meio do fluxo de autenticação nativa são iguais ao token obtido por meio do fluxo delegado pelo navegador.