Samouczek: dodawanie aplikacji logowania w systemie Android przy użyciu uwierzytelniania natywnego
W tym samouczku pokazano, jak zalogować się i wylogować użytkownika przy użyciu jednorazowego kodu dostępu lub nazwy użytkownika lub nazwy użytkownika i hasła w aplikacji mobilnej systemu Android przy użyciu uwierzytelniania natywnego.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Zaloguj się do użytkownika przy użyciu jednorazowego kodu dostępu lub nazwy użytkownika (e-mail) i hasła.
- Wyloguj użytkownika.
- Błąd obsługi logowania
Wymagania wstępne
- Wykonaj kroki opisane w artykule Samouczek: przygotowywanie aplikacji systemu Android do uwierzytelniania natywnego. W tym samouczku pokazano, jak przygotować projekt systemu Android lub aplikację do uwierzytelniania natywnego.
Logowanie użytkownika
Aby zalogować się do użytkownika przy użyciu jednorazowego kodu dostępu, zbierz wiadomość e-mail i wyślij wiadomość e-mail zawierającą jednorazowy kod dostępu dla użytkownika, aby zweryfikować swoją wiadomość e-mail. Gdy użytkownik wprowadzi prawidłowy jednorazowy kod dostępu, aplikacja je zaloguje.
Aby zalogować użytkownika przy użyciu nazwy użytkownika (wiadomości e-mail) i hasła, zbierz wiadomość e-mail i hasło od użytkownika. Jeśli nazwa użytkownika i hasło są prawidłowe, aplikacja loguje się do użytkownika.
Aby zalogować użytkownika, musisz:
Utwórz interfejs użytkownika w celu:
- Zbierz wiadomość e-mail od użytkownika. Dodaj walidację do danych wejściowych, aby upewnić się, że użytkownik wprowadzi prawidłowy adres e-mail.
- Zbierz hasło, jeśli zalogujesz się przy użyciu nazwy użytkownika (e-mail) i hasła.
- Zbierz jednorazowy kod dostępu wiadomości e-mail od użytkownika, jeśli logujesz się przy użyciu jednorazowego kodu dostępu poczty e-mail.
- Wyślij ponownie jednorazowy kod dostępu (zalecane), jeśli logujesz się przy użyciu jednorazowego kodu dostępu poczty e-mail.
W interfejsie użytkownika dodaj przycisk, którego zdarzenie select uruchamia logowanie, jak pokazano w poniższym fragmencie kodu:
CoroutineScope(Dispatchers.Main).launch { val actionResult = authClient.signIn( username = emailAddress //password = password, Pass 'password' param if you sign in with username (email) and password ) if (actionResult is SignInResult.CodeRequired) { val nextState = actionResult.nextState val submitCodeActionResult = nextState.submitCode( code = code ) if (submitCodeActionResult is SignInResult.Complete){ // Handle sign in success val accountState = submitCodeActionResult.resultValue val accessTokenResult = accountState.getAccessToken() if (accessTokenResult is GetAccessTokenResult.Complete) { val accessToken = accessTokenResult.resultValue.accessToken val idToken = accountState.getIdToken() } } } }
Jeśli użytkownik nie jest wymagany do przesłania kodu dostępu, takiego jak miejsce logowania użytkownika za pomocą poczty e-mail i hasła, użyj następującego fragmentu kodu:
CoroutineScope(Dispatchers.Main).launch { val actionResult = authClient.signIn( username = emailAddress, password = password ) if (actionResult is SignInResult.Complete) -> { // Handle sign in success val accountState = actionResult.resultValue val accessTokenResult = accountState.getAccessToken() if (accessTokenResult is GetAccessTokenResult.Complete) { val accessToken = accessTokenResult.resultValue.accessToken val idToken = accountState.getIdToken() } } }
- Aby uruchomić przepływ logowania, użyj metody lub
signIn(username, password)
zestawu SDKsignIn(username)
. - Parametr
username
metody to adres e-mail zbierany od użytkownika. - Jeśli metoda logowania to nazwa użytkownika (adres e-mail) i hasło, parametr
password
metody to hasło zbierane od użytkownika. - W najbardziej typowym scenariuszu
signIn(username)
metoda lubsignIn(username, password)
zwraca wynik , który wskazuje,SignInResult.CodeRequired
że zestaw SDK oczekuje, że aplikacja będzie przesyłać jednorazowy kod dostępu do wiadomości e-mail wysłany na adres e-mail użytkownika. - Obiekt
SignInResult.CodeRequired
zawiera nowe odwołanie do stanu, które możemy pobrać za pomocąactionResult.nextState
polecenia . - Nowy stan daje nam dostęp do dwóch nowych metod:
submitCode()
przesyła jednorazowy kod dostępu wiadomości e-mail zbierany przez aplikację od użytkownika.resendCode()
wysyła ponownie kod dostępu jednorazowego wiadomości e-mail, jeśli użytkownik nie otrzyma kodu.
- Aby uruchomić przepływ logowania, użyj metody lub
Obsługa błędów logowania
Podczas logowania nie wszystkie akcje kończą się powodzeniem. Na przykład użytkownik może spróbować zalogować się przy użyciu adresu e-mail, który nie istnieje lub przesłać nieprawidłowy kod.
Obsługa błędów uruchamiania logowania
Aby obsłużyć błędy w metodzie signIn(username)
lub signIn(username, password)
, użyj następującego fragmentu kodu:
val actionResult = authClient.sign(
username = emailAddress
//password = password, Pass 'password' param if you sign in with username (email) and password
)
if (actionResult is SignInResult.CodeRequired) {
// Next step: submit code
} else if (actionResult is SignInError) {
// Handle sign in errors
when {
actionResult.isUserNotFound() -> {
// Handle "user not found" error
}
actionResult.isAuthNotSupported() -> {
// Handle "authentication type not support" error
}
actionResult.isInvalidCredentials() -> {
// Handle specific errors
}
else -> {
// Handle other errors
}
}
}
SignInError
wskazuje wynik nieudanej akcji zwrócony przezsignIn()
element , więc wynik akcji nie zawiera odwołania do nowego stanu.- Jeśli
actionResult is SignUpError
zestaw SDK systemu Android udostępnia metody narzędziowe umożliwiające dalsze analizowanie określonych błędów:- Metoda
isUserNotFound()
sprawdza, czy użytkownik loguje się przy użyciu nazwy użytkownika (adresu e-mail), która nie istnieje. - Metoda
isBrowserRequired()
sprawdza potrzebę korzystania z przeglądarki (rezerwowego internetowego) w celu ukończenia przepływu uwierzytelniania. Ten scenariusz występuje, gdy uwierzytelnianie natywne nie jest wystarczające do ukończenia przepływu uwierzytelniania. Na przykład administrator konfiguruje adres e-mail i hasło jako metodę uwierzytelniania, ale aplikacja nie może wysłać hasła jako typu wyzwania lub po prostu nie obsługuje go. Wykonaj kroki opisane w temacie Obsługa rezerwowego w internecie w aplikacji dla systemu Android, aby obsłużyć scenariusz w takim przypadku. - Metoda
isAuthNotSupported()
sprawdza, czy aplikacja wysyła typ wyzwania, którego firma Microsoft Entra nie obsługuje, jest to wartość typu wyzwania inna niż oob i hasło. Dowiedz się więcej o typach wyzwań. - W przypadku nazwy użytkownika (poczty e-mail) i logowania przy użyciu hasła metoda
isInvalidCredentials()
sprawdza, czy kombinacja nazwy użytkownika i hasła jest niepoprawna.
- Metoda
Obsługa błędów przesyłania kodu
Aby obsłużyć błędy w submitCode()
metodzie, użyj następującego fragmentu kodu:
val submitCodeActionResult = nextState.submitCode(
code = code
)
if (submitCodeActionResult is SignInResult.Complete) {
// Sign in flow complete, handle success state.
} else if (submitCodeActionResult is SubmitCodeError && submitCodeActionResult.isInvalidCode()) {
// Handle "invalid code" error
}
- Błąd
SubmitCodeError
wskazuje wynik nieudanej akcji zwrócony przezsubmitCode()
element i dlatego wynik akcji nie zawiera odwołania do nowego stanu. - Sprawdza
isInvalidCode()
określony błąd. W takim przypadku należy użyć poprzedniego odwołania do stanu w celu ponownego wykonania akcji.
Aby pobrać nowy kod dostępu jednorazowego wiadomości e-mail, użyj następującego fragmentu kodu:
val submitCodeActionResult = nextState.submitCode(
code = code
)
if (submitCodeActionResult is SignInError && submitCodeActionResult.isInvalidCode) {
// Inform the user that the submitted code was incorrect or invalid, then ask them to input a new email one-time passcode
val newCode = retrieveNewCode()
nextState.submitCode(
code = newCode
)
}
Wszystkie kroki niezbędne do pomyślnego zalogowania użytkownika w aplikacji zostały wykonane. Skompiluj i uruchom aplikację. Jeśli wszystko jest dobre, powinno być możliwe podanie wiadomości e-mail, otrzymanie kodu w wiadomości e-mail i użycie jej do pomyślnego zalogowania użytkownika.
Oświadczenia tokenu identyfikatora odczytu
Gdy aplikacja uzyska token identyfikatora, możesz pobrać oświadczenia skojarzone z bieżącym kontem. W tym celu użyj następującego fragmentu kodu.
val preferredUsername = accountState.getClaims()?.get("preferred_username")
val city = accountState.getClaims()?.get("City")
val givenName = accountState.getClaims()?.get("given_name")
//custom attribute
val loyaltyNumber = accountState.getClaims()?.get("loyaltyNumber")
Klucz używany do uzyskiwania dostępu do wartości oświadczenia to nazwa określona podczas dodawania atrybutu użytkownika jako oświadczenia tokenu.
Aby dowiedzieć się, jak dodać wbudowane i niestandardowe atrybuty jako oświadczenia tokenu w artykule Dodawanie atrybutów użytkownika do oświadczeń tokenu .
Wylogowywanie użytkownika
Aby wylogować użytkownika, musisz usunąć konto obecnie przechowywane w pamięci podręcznej.
Utwórz niestandardowy interfejs użytkownika( UI), który obejmuje:
- Przycisk wyloguj się, który użytkownik wybierze, aby wysłać żądanie wylogowania.
Aby wylogować użytkownika, użyj następującego kodu:
private fun performSignOut(accountState: AccountState) { CoroutineScope(Dispatchers.Main).launch { val accountResult = authClient.getCurrentAccount() if (accountResult is GetAccountResult.AccountFound) { val signOutResult = accountResult.resultValue.signOut() if (signOutResult is SignOutResult.Complete) { // Show sign out successful UI } } } }
Obsługa błędów wylogowywanie
Wylogowywanie powinno być wolne od błędów. Jeśli wystąpią jakiekolwiek błędy, sprawdź wynik błędu przy użyciu następującego fragmentu kodu:
val actionResult = accountResult.signOut()
if (actionResult is SignOutResult.Complete) {
// Show sign out successful UI
} else {
// Handle errors
}
Upewnij się, że dołączysz instrukcje importowania. Program Android Studio powinien automatycznie dołączać instrukcje importowania.
Wszystkie kroki niezbędne do pomyślnego wylogowania użytkownika w aplikacji zostały wykonane. Skompiluj i uruchom aplikację. Jeśli wszystko jest dobre, możesz wybrać przycisk wyloguj się, aby pomyślnie się wylogować.
Konfigurowanie niestandardowego dostawcy oświadczeń
Jeśli chcesz dodać oświadczenia z systemu zewnętrznego do tokenu wystawionego dla aplikacji, użyj niestandardowego dostawcy oświadczeń. Niestandardowy dostawca oświadczeń składa się z niestandardowego rozszerzenia uwierzytelniania, które wywołuje zewnętrzny interfejs API REST w celu pobierania oświadczeń z systemów zewnętrznych.
Wykonaj kroki opisane w temacie Konfigurowanie niestandardowego dostawcy oświadczeń, aby dodać oświadczenia z systemu zewnętrznego do tokenów zabezpieczających.
Powiązana zawartość
- Samouczek: rejestrowanie użytkownika przy użyciu atrybutów użytkownika i użytkownika.
- Skonfiguruj niestandardowego dostawcę oświadczeń.
- Dodaj atrybuty użytkownika jako oświadczenia tokenu.