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
Abra seu projeto no Android Studio ou crie um novo projeto.
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.+' //... }
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:
No painel de projetos do Android Studio, navegue até app\src\main\res.
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.Em app\src\main\res\raw, crie um novo arquivo JSON chamado
auth_config_native_auth.json
.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 } } //...
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 forcontoso.onmicrosoft.com
, usecontoso
. 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.
- Substitua o espaço reservado
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
}
}
//...
- logcat_enabled: Habilita a funcionalidade de registro em log da biblioteca.
- 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.
- log_level: Use-o para decidir qual nível de log habilitar. O Android suporta os seguintes níveis de registo:
- ERRO
- AVISO
- INFORMAÇÃO
- 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(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 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.