Tutorial: Preparar seu aplicativo móvel Android para autenticação nativa
Este tutorial demonstra como adicionar o SDK de autenticação nativa da MSAL (Biblioteca de Autenticação da Microsoft) a um aplicativo móvel Android.
Neste tutorial, você aprenderá a:
- Adicionar dependências da MSAL.
- Criar um arquivo de configuração.
- Crie uma instância do SDK da MSAL.
Pré-requisitos
- Se ainda não o fez, siga as instruções em Conectar usuários no aplicativo móvel Android (Kotlin) de exemplo usando autenticação nativa e registre um aplicativo no locatário externo. Certifique-se de concluir as seguintes etapas:
- Registre um aplicativo.
- Habilite os fluxos do cliente público e da autenticação nativa.
- Conceder permissões de API.
- Criar um fluxo de usuário.
- Associe o aplicativo ao fluxo do usuário.
- Um projeto Android. Se você não tiver um projeto Android, crie-o.
Adicionar dependências da MSAL
Abra seu projeto no Android Studio ou crie um projeto.
Abra o
build.gradle
do aplicativo e 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.+' //... }
No Android Studio, selecione Arquivo>Sincronizar Projeto com Arquivos do Gradle.
Criar um arquivo de configuração
Você passa os identificadores de locatário necessários, como a ID do aplicativo (cliente), para o SDK da MSAL por meio de uma configuração JSON.
Use estas etapas para criar o arquivo de configuração:
No painel do projeto do Android Studio, navegue até app\src\main\res.
Clique com o botão direito do mouse em res e selecione Novo>Diretório. Insira
raw
como o nome do novo diretório e selecione OK.Em app\src\main\res\raw, crie um novo arquivo JSON chamado
auth_config_native_auth.json
.No arquivo
auth_config_native_auth.json
, adicione as seguintes configurações da 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 } } //...
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
pela ID do aplicativo (cliente) do aplicativo que você registrou anteriormente. - Substitua
Enter_the_Tenant_Subdomain_Here
pelo subdomínio do diretório (locatário). Por exemplo, se o domínio primário do locatário forcontoso.onmicrosoft.com
, usecontoso
. Se você não tiver o nome do locatário, saiba como ler os detalhes do locatário.
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 compatível.
- Para fluxos de inscrição e entrada com senha de uso único por email, use
["oob"]
. - Para fluxos de inscrição e entrada com email e senha, use
["oob","password"]
. - Para redefinição de senha self-service (SSPR), use
["oob"]
.
Saiba mais sobre tipos de desafio.
- Substitua o espaço reservado
Opcional: configuração do registro em log
Ative o registro em log na criação do aplicativo criando um retorno de chamada de registro em 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 agente, 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
}
}
//...
- logcat_enabled: habilita a funcionalidade de registrar em log da biblioteca.
- pii_enabled: especifica se as mensagens que contém dados pessoais ou dados organizacionais são registradas. Quando definidos como false, os logs não contêm dados pessoais. Quando definidos como true, os logs podem conter dados pessoais.
- log_level: use-o para decidir qual nível de registro em log habilitar. O Android dá suporte aos seguintes níveis de log:
- ERROR
- WARNING
- INFO
- VERBOSE
Para obter mais informações sobre o registro em log da MSAL, consulte Registro em log na MSAL para Android.
Criar uma instância do SDK do MSAL de autenticação nativa
No método onCreate()
, crie uma instância de MSAL para que o aplicativo possa executar a autenticação com seu locatário por meio da autenticação nativa. O método createNativeAuthPublicClientApplication()
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(accountResult: 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
getCurrentAccount()
, que retorna um objeto,accountResult
. - Se uma conta estiver em persistência, use
GetAccountResult.AccountFound
para exibir um estado conectado. - Caso contrário, use
GetAccountResult.NoAccountFound
para exibir um estado de saída.
Certifique-se de incluir as instruções de importação. O Android Studio deve incluir as instruções de importação para você automaticamente.