Partilhar via


Tutorial: Preparar seu aplicativo móvel Android para autenticação nativa

Este tutorial demonstra como adicionar o SDK de autenticação nativo da Microsoft Authentication Library (MSAL) a um aplicativo móvel Android.

Neste tutorial, irá aprender a:

  • Adicione dependências MSAL.
  • Crie um arquivo de configuração.
  • Crie uma instância do SDK do MSAL.

Pré-requisitos

  • Se ainda não o fez, siga as instruções em Iniciar sessão de utilizadores na aplicação móvel Android (Kotlin) de exemplo utilizando a autenticação nativa e registar uma aplicação no seu inquilino externo. Certifique-se de concluir as seguintes etapas:
    • Registe uma candidatura.
    • Habilite fluxos de autenticação nativa e de cliente público.
    • Conceda permissões de API.
    • Crie um fluxo de usuário.
    • Associe o aplicativo ao fluxo de usuários.
  • Um projeto Android. Se você não tiver um projeto Android, crie-o.

Adicionar dependências MSAL

  1. Abra seu projeto no Android Studio ou crie um novo projeto.

  2. Abra o aplicativo e build.gradle adicione as seguintes dependências:

    allprojects {
        repositories {
            //Needed for com.microsoft.device.display:display-mask library
            maven {
                url 'https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1'
                name 'Duo-SDK-Feed'
            }
            mavenCentral()
            google()
        }
    }
    //...
    
    dependencies { 
        implementation 'com.microsoft.identity.client:msal:5.+'
        //...
    }
    
  3. No Android Studio, selecione File>Sync Project with Gradle Files.

Criar um arquivo de configuração

Você passa os identificadores de locatário necessários, como a ID do aplicativo (cliente), para o SDK do MSAL por meio de uma definição de configuração JSON.

Use estas etapas para criar o arquivo de configuração:

  1. No painel de projetos do Android Studio, navegue até app\src\main\res.

  2. Clique com o botão direito do mouse em res e selecione Novo>diretório. Digite raw como o novo nome do diretório e selecione OK.

  3. Em app\src\main\res\raw, crie um novo arquivo JSON chamado auth_config_native_auth.json.

  4. auth_config_native_auth.json No arquivo, adicione as seguintes configurações MSAL:

    { 
      "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 
      } 
    } 
     //...
    
  5. Substitua os seguintes espaços reservados pelos valores de locatário obtidos no centro de administração do Microsoft Entra:

    • Substitua o espaço reservado Enter_the_Application_Id_Here pelo ID do aplicativo (cliente) do aplicativo registrado anteriormente.
    • Substitua o Enter_the_Tenant_Subdomain_Here pelo subdomínio diretório (locatário). Por exemplo, se o domínio principal do locatário for contoso.onmicrosoft.com, use contoso. Se não tiver o nome do inquilino, saiba como ler os detalhes do inquilino.

    Os tipos de desafio são uma lista de valores, que o aplicativo usa para notificar o Microsoft Entra sobre o método de autenticação que ele suporta.

    • Para fluxos de inscrição e login com senha única de e-mail, use ["oob"].
    • Para fluxos de inscrição e login com e-mail e senha, use ["oob","password"].
    • Para redefinição de senha de autoatendimento (SSPR), use ["oob"].

    Saiba mais sobre os tipos de desafio.

Opcional: Configuração de registro em log

Ative o registro em log na criação de aplicativos criando um retorno de chamada de log, para que o SDK possa gerar logs.

import com.microsoft.identity.client.Logger

fun initialize(context: Context) {
        Logger.getInstance().setExternalLogger { tag, logLevel, message, containsPII ->
            Logs.append("$tag $logLevel $message")
        }
    }

Para configurar o registrador, você precisa adicionar uma seção no arquivo de configuração, auth_config_native_auth.json:

    //...
   { 
     "logging": { 
       "pii_enabled": false, 
       "log_level": "INFO", 
       "logcat_enabled": true 
     } 
   } 
    //...
  1. logcat_enabled: Habilita a funcionalidade de registro em log da biblioteca.
  2. pii_enabled: Especifica se as mensagens que contêm dados pessoais ou dados organizacionais são registradas. Quando definido como false, os logs não conterão dados pessoais. Quando definidos como true, os logs podem conter dados pessoais.
  3. log_level: Use-o para decidir qual nível de log habilitar. O Android suporta os seguintes níveis de registo:
    1. ERRO
    2. AVISO
    3. INFORMAÇÃO
    4. VERBOSO

Para obter mais informações sobre o registro em log do MSAL, consulte Fazendo login no MSAL para Android.

Criar instância de autenticação nativa do SDK do MSAL

No método, crie uma instância MSAL para que o aplicativo possa executar a onCreate() autenticação com seu locatário por meio da autenticação nativa. O createNativeAuthPublicClientApplication() método retorna uma instância chamada authClient. Passe o arquivo de configuração JSON que você criou anteriormente como um parâmetro.

    //...
    authClient = PublicClientApplication.createNativeAuthPublicClientApplication( 
        this, 
        R.raw.auth_config_native_auth 
    )
    //...

Seu código deve ser semelhante ao seguinte trecho:

    class MainActivity : AppCompatActivity() { 
        private lateinit var authClient: INativeAuthPublicClientApplication 
 
        override fun onCreate(savedInstanceState: Bundle?) { 
            super.onCreate(savedInstanceState) 
            setContentView(R.layout.activity_main) 
 
            authClient = PublicClientApplication.createNativeAuthPublicClientApplication( 
                this, 
                R.raw.auth_config_native_auth 
            ) 
            getAccountState() 
        } 
 
        private fun getAccountState() {
            CoroutineScope(Dispatchers.Main).launch {
                val accountResult = authClient.getCurrentAccount()
                when (accountResult) {
                    is GetAccountResult.AccountFound -> {
                        displaySignedInState(accountResult.resultValue)
                    }
                    is GetAccountResult.NoAccountFound -> {
                        displaySignedOutState()
                    }
                }
            }
        } 
 
        private fun displaySignedInState(accountState: AccountState) { 
            val accountName = accountResult.getAccount().username 
            val textView: TextView = findViewById(R.id.accountText) 
            textView.text = "Cached account found: $accountName" 
        } 
 
        private fun displaySignedOutState() { 
            val textView: TextView = findViewById(R.id.accountText) 
            textView.text = "No cached account found" 
        } 
    } 
  • Recupere a conta armazenada em cache usando o getCurrentAccount(), que retorna um objeto, accountResult.
  • Se uma conta for encontrada em persistência, use GetAccountResult.AccountFound para exibir um estado conectado.
  • Caso contrário, use GetAccountResult.NoAccountFound para exibir um estado desconectado.

Certifique-se de incluir as instruções de importação. O Android Studio deve incluir as instruções de importação para você automaticamente.

Próximo passo