Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:
Inquilinos externos (saiba mais)
Este tutorial demonstra como registar um utilizador usando o código de acesso de email único ou nome de utilizador (email) e palavra-passe na sua aplicação móvel Android, utilizando autenticação nativa. Também aprende a recolher atributos de utilizador durante o registo, incluindo um nome de utilizador (alias), e a lidar com erros.
Neste tutorial, você:
- Inscreva um usuário usando e-mail, senha única ou nome de usuário (e-mail) e senha.
- Recolha atributos do utilizador durante o registo, incluindo um nome de utilizador (pseudónimo).
- Lidar com erros de inscrição.
Pré-requisitos
- Conclua as etapas em Tutorial: Preparar seu aplicativo Android para autenticação nativa.
- Se você quiser coletar atributos de usuário durante a inscrição, configure os atributos de usuário quando criar seu fluxo de usuário de inscrição e entrada.
- Para obter um nome de utilizador (pseudónimo) durante o registo, ative o atributo de utilizador incorporado Username no fluxo de utilizador de registo do seu tenant.
Inscrever um utilizador
Para inscrever um utilizador usando o código de acesso único do email ou nome de utilizador (email) e palavra-passe, recolhe um email do utilizador e depois envia um email contendo um código de acesso único ao utilizador. O usuário insere uma senha única de e-mail válida para validar seu nome de usuário.
Para inscrever um usuário, você precisa:
Crie uma interface do usuário (UI) para:
- Colete um e-mail do usuário. Adicione validação às suas entradas para garantir que o usuário insira um endereço de e-mail válido.
- Colete uma senha se você se inscrever com nome de usuário (e-mail) e senha.
- Recolha um nome de utilizador (alias) se a sua aplicação suportar login baseado em alias.
- Colete uma senha única de e-mail do usuário.
- Se necessário, colete atributos de usuário.
- Reenvie uma senha única (recomendado).
- Inicie o fluxo de inscrição.
Em seu aplicativo, adicione um botão, cujo evento select dispara o seguinte trecho de código:
CoroutineScope(Dispatchers.Main).launch { val parameters = NativeAuthSignUpParameters(username = email) // Assign 'password' param if you sign in with username (email) and password // parameters.password = password val actionResult: SignUpResult = authClient.signUp(parameters) if (actionResult is SignUpResult.CodeRequired) { val nextState = actionResult.nextState val submitCodeActionResult = nextState.submitCode( code = code ) if (submitCodeActionResult is SignUpResult.Complete) { // Handle sign up success } } }- Use o método de instância do SDK,
signUp(parameters)para iniciar o fluxo de inscrição. - Para se inscrever usando nome de usuário (endereço de e-mail) e senha, crie uma instância de
NativeAuthSignUpParametersclasse e atribua seu nome de usuário e senha. - O parâmetro de inscrição,
username, é o endereço de e-mail que você coleta do usuário. - No cenário mais comum, o
signUp(parameters)devolve um resultado,SignUpResult.CodeRequired, que indica que o SDK espera que a aplicação submeta o código de acesso de email único enviado para o endereço de email do utilizador. - O
SignUpResult.CodeRequiredobjeto contém uma nova referência de estado, que pode recuperar através deactionResult.nextState. - O novo estado dá-lhe acesso a dois novos métodos:
-
submitCode()envia a senha única de e-mail que o aplicativo coleta do usuário. -
resendCode()reenvia a senha única do e-mail se o usuário não receber o código.
-
- O
submitCode()retornaSignUpResult.Complete, o que indica que o fluxo está concluído e que o usuário foi inscrito. - O
signUp(parameters)também pode retornarSignUpErrorpara indicar que ocorreu um erro.
- Use o método de instância do SDK,
Coletar atributos de usuário durante a inscrição
Se você inscrever um usuário usando senha única de e-mail ou nome de usuário (e-mail) e senha, você pode coletar atributos de usuário antes que a conta de um usuário seja criada:
A instância
NativeAuthSignUpParametersaceita um parâmetroattributes:CoroutineScope(Dispatchers.Main).launch { val parameters = NativeAuthSignUpParameters(username = email) // Assign 'password' param if you sign in with username (email) and password // parameters.password = password parameters.attributes = userAttributes val actionResult: SignUpResult = authClient.signUp(parameters) //... }O SDK do Android fornece uma classe de utilitário
UserAttribute.Builderque você usa para criar atributos de usuário. Por exemplo, para enviar os atributos de usuário de cidade e país , use o seguinte trecho de código para criar a variáveluserAttributes:val userAttributes = UserAttributes.Builder () .country(country) .city(city) .build()Os nomes de método na classe
UserAttribute.Buildersão iguais aos nomes programáveis dos atributos de usuário que eles criam. Saiba mais sobre o construtor de atributos do SDK do Android .O método
signUp(parameters)pode retornarSignUpResult.AttributesRequiredpara indicar que o aplicativo precisa enviar um ou mais atributos necessários antes que o Microsoft Entra crie uma conta. Esses atributos são configurados pelo administrador como obrigatórios no centro de administração do Microsoft Entra. O Microsoft Entra não solicita explicitamente atributos de usuário opcionais.O resultado
SignUpResult.AttributesRequiredcontém um parâmetrorequiredAttributes.requiredAttributesé uma lista de objetosRequiredUserAttributeque contém detalhes sobre os atributos de usuário que o aplicativo precisa enviar. Para lidar comactionResult is SignUpResult.AttributesRequired, use o seguinte trecho de código:val parameters = NativeAuthSignUpParameters(username = email) // Assign 'password' param if you sign in with username (email) and password // parameters.password = password parameters.attributes = userAttributes val actionResult: SignUpResult = authClient.signUp(parameters) if (actionResult is SignUpResult.AttributesRequired) { val requiredAttributes = actionResult.requiredAttributes // Handle "attributes required" result val nextState = actionResult.nextState nextState.submitAttributes( attributes = moreAttributes ) }
Recolha um nome de utilizador (alias) durante o registo
O nome de utilizador (alias) é um atributo especial do utilizador. Tal como outros atributos, como a cidade ou o país, recolhe essa informação durante o processo de registo. Ao contrário desses atributos, o utilizador pode depois usar o alias para iniciar sessão. O pseudónimo (por exemplo, "johndoe") oferece aos utilizadores uma forma mais curta e amigável de iniciar sessão do que o seu endereço de email.
O nome de utilizador (alias) não substitui o nome de utilizador (email). Durante o registo, a aplicação deve sempre recolher o nome de utilizador (email) como identificador principal, e recolhe o alias como um atributo juntamente com o email. No início de sessão, o utilizador pode então escolher iniciar sessão com o seu nome de utilizador (email) ou com o seu nome de utilizador (alias).
Quando o atributo de utilizador incorporado Username está ativado no seu fluxo de utilizador de inscrição, o SDK aceita-o através do mesmo construtor UserAttributes utilizado para outros atributos, utilizando o método flatUsername(). Pode passar o nome de utilizador (alias) diretamente na chamada de inscrição para que o utilizador não precise de passar por um passo separado exigido por atributos.
Para recolher um nome de utilizador (alias), adicione um campo de entrada para o nome de utilizador na sua interface de inscrição ao lado do campo de email, depois passe o alias como um atributo na chamada de inscrição:
val email = binding.emailText.text.toString()
val password = binding.passwordText.text.toString()
val username = binding.usernameText.text.toString()
val attributes = UserAttributes.Builder()
.flatUsername(username)
.build()
CoroutineScope(Dispatchers.Main).launch {
val actionResult = authClient.signUpUsingPassword(
username = email,
password = password,
attributes = attributes
)
when (actionResult) {
is SignUpResult.CodeRequired -> {
// Navigate to code verification
navigateToCodeVerification(actionResult.nextState)
}
is SignUpUsingPasswordError -> {
handleSignUpError(actionResult)
}
}
}
Para fluxos de código de acesso único de email (sem palavra-passe), use signUp em vez de signUpUsingPassword:
val actionResult = authClient.signUp(
username = email,
attributes = attributes
)
Lidar com erros de inscrição
Durante a inscrição, nem todas as ações são bem-sucedidas. Por exemplo, o usuário pode tentar se inscrever com um endereço de e-mail já usado ou enviar uma senha única de e-mail inválida.
Gerir erro de início do registo
Para manipular erros para o método signUp(), use o seguinte trecho de código:
val parameters = NativeAuthSignUpParameters(username = email)
// Assign 'password' param if you sign in with username (email) and password
// parameters.password = password
val actionResult: SignUpResult = authClient.signUp(parameters)
if (actionResult is SignUpResult.CodeRequired) {
// Next step: submit code
} else if (actionResult is SignUpError) {
when {
actionResult.isUserAlreadyExists() -> {
// Handle "user already exists" error
}
else -> {
// Handle other errors
}
}
}
signUp(parameters)pode retornarSignUpError.SignUpErrorindica um resultado de ação malsucedido retornado porsignUp()e não incluirá uma referência ao novo estado.Se
actionResult is SignUpError, o SDK Android da Biblioteca de Autenticação da Microsoft (MSAL) fornece métodos utilitários para analisar mais a fundo os erros específicos:- O método
isUserAlreadyExists()verifica se o nome de utilizador ou alias já foi usado para criar uma conta. -
isInvalidAttributes()verifica se um ou mais atributos enviados pelo aplicativo falharam na validação, como o tipo de dados errado. Contém uminvalidAttributesparâmetro, que é uma lista de todos os atributos que a aplicação submeteu, mas que falhou na validação. -
isInvalidPassword()verifica se a palavra-passe é inválida, como quando não cumpre todos os requisitos de complexidade da palavra-passe. Saiba mais sobre as políticas de senha do Microsoft Entra -
isInvalidUsername()verifica se o nome de utilizador é inválido, como quando o email do utilizador é inválido. -
isBrowserRequired()verifica se é necessário um navegador (web fallback) para completar o fluxo de autenticação. Esse cenário acontece quando a autenticação nativa não é suficiente para concluir o fluxo de autenticação. Por exemplo, um administrador configura email e palavra-passe como método de autenticação, mas a aplicação não envia palavra-passe como tipo de desafio ou não a suporta. Utilize os passos no Suporte Web Fallback na aplicação Android para lidar com este cenário. -
isAuthNotSupported()verifica se o aplicativo envia um tipo de desafio que o Microsoft Entra não suporta, ou seja, um valor de tipo de desafio diferente de oob ou senha. Saiba mais sobre os tipos de desafio .
Notifique o usuário de que o email já está em uso ou que alguns atributos são inválidos usando uma mensagem amigável na interface do usuário do aplicativo.
- O método
Para manipular o erro de atributos inválidos, use o seguinte trecho de código:
val parameters = NativeAuthSignUpParameters(username = email) // Assign 'password' param if you sign in with username (email) and password // parameters.password = password parameters.attributes = userAttributes val actionResult: SignUpResult = authClient.signUp(parameters) if (actionResult is SignUpError && actionResult.isInvalidAttributes()) { val invalidAttributes = actionResult.invalidAttributes // Handle "invalid attributes" error, this time submit valid attributes val parameters = NativeAuthSignUpParameters(username = email) // Assign 'password' param if you sign in with username (email) and password // parameters.password = password parameters.attributes = userAttributes authClient.signUp(parameters) } //...
Gerir o erro na submissão do código de acesso único via e-mail
Para manipular erros para o método submitCode(), use o seguinte trecho de código:
val submitCodeActionResult = nextState.submitCode(
code = code
)
if (submitCodeActionResult is SignUpResult.Complete) {
// Sign up flow complete, handle success state.
} else if (submitCodeActionResult is SubmitCodeError) {
// Handle errors under SubmitCodeError
when {
submitCodeActionResult.isInvalidCode() -> {
// Handle "code invalid" error
}
else -> {
// Handle other errors
}
}
}
submitCode()pode retornarSubmitCodeError.Use o método
isInvalidCode()para verificar o erro específico, como, por exemplo, o código enviado é inválido. Nesse caso, a referência de estado anterior deve ser usada para executar novamente a ação.Para recuperar uma nova senha única de e-mail, use o seguinte trecho de código:
val submitCodeActionResult = nextState.submitCode( code = code ) if (submitCodeActionResult is SubmitCodeError && submitCodeActionResult.isInvalidCode()) { // Inform the user that the submitted code was incorrect or invalid and ask for a new code to be supplied val newCode = retrieveNewCode() nextState.submitCode( code = newCode ) }
Certifique-se de incluir as declarações de importação. Android Studio deve incluir as declarações de importação para você automaticamente.
Já completou todos os passos necessários para registar um utilizador na sua aplicação. Crie e execute seu aplicativo. Se tudo estiver configurado corretamente, deverá conseguir inscrever o utilizador usando um código de acesso único por email ou email e palavra-passe, e recolher atributos de utilizador, incluindo um nome de utilizador (alias).
Opcional: Entrar após um processo de registo
Após um fluxo de registo bem-sucedido, pode iniciar a sessão de um utilizador sem iniciar um fluxo de início de sessão. Se o utilizador se inscrever com um nome de utilizador (alias), pode iniciar sessão usando o seu endereço de email ou o seu alias. Saiba mais no artigo Tutorial : Iniciar sessão como utilizador após o registo no Android.
Próximos passos
Tutorial: Adicionar acesso e saída com código de acesso único por e-mail na aplicação Android.