Partilhar via


Tutorial: Suporte a fallback da Web no aplicativo Android

Aplica-se a: círculo verde com um símbolo de marca de seleção branco que indica que o conteúdo a seguir se aplica a locatários externos. Inquilinos externos (saiba mais)

Este tutorial demonstra como isBrowserRequired() 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ê:

  • Verificar isBrowserRequired()
  • Lidar com isBrowserRequired()

Pré-requisitos

Alternativa da Web

Utilize 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 utilizador.

Ao inicializar o SDK do Android, especificam-se os tipos de desafio suportados pela aplicação móvel, como oob e palavra-passe.

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 o método de autenticação por e-mail e senha.

Nesse caso, o método utilitário isBrowserRequired() 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 oob tipo de desafio, 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 o seu fluxo de usuário para usar e-mail com senha como método de autenticação.

  3. Inicie um fluxo de inscrição usando o método signUp(parameters) do SDK. Você recebe um SignUpError que passa na verificação isBrowserRequired(), pois o Microsoft Entra espera palavra-passe 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 parameters = NativeAuthSignUpParameters(username = email)
    val actionResult: SignUpResult = authClient.signUp(parameters)
    
    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 acquireToken() da Microsoft Authentication Library (MSAL).

Para fazer isso, use 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 ficheiro de configuração da sua aplicação cliente, utilize os passos em Configurar a aplicação de exemplo.

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

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

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.