Kurz: Přidání přihlášení do aplikace pro Android pomocí nativního ověřování
Tento kurz ukazuje, jak se přihlásit a odhlásit uživatele pomocí jednorázového hesla nebo uživatelského jména nebo uživatelského jména a hesla v mobilní aplikaci pro Android pomocí nativního ověřování.
V tomto kurzu se naučíte:
- Přihlaste se k uživateli pomocí jednorázového hesla e-mailu nebo uživatelského jména (e-mailu) a hesla.
- Odhlaste se od uživatele.
- Zpracování chyby přihlášení
Požadavky
- Dokončete kroky v kurzu: Příprava aplikace pro Android na nativní ověřování. V tomto kurzu se dozvíte, jak připravit projekt nebo aplikaci pro Android na nativní ověřování.
Přihlášení uživatele
Pokud se chcete přihlásit uživatele pomocí jednorázového hesla, shromážděte e-mail a odešlete e-mail obsahující jednorázové heslo, aby uživatel ověřil svůj e-mail. Když uživatel zadá platné jednorázové heslo, aplikace ho přihlásí.
Pokud se chcete přihlásit uživatele pomocí uživatelského jména (e-mailu) a hesla, shromážděte e-mail a heslo od uživatele. Pokud je uživatelské jméno a heslo platné, aplikace se přihlásí uživatele.
Pokud se chcete přihlásit uživatele, musíte:
Vytvořte uživatelské rozhraní pro:
- Shromážděte e-mail od uživatele. Přidejte do vstupů ověření, abyste měli jistotu, že uživatel zadá platnou e-mailovou adresu.
- Pokud se přihlásíte pomocí uživatelského jména (e-mailu) a hesla, shromážděte heslo.
- Pokud se přihlásíte pomocí jednorázového hesla e-mailu, shromážděte od uživatele jednorázové heslo e-mailu.
- Pokud se přihlašujete pomocí jednorázového hesla e-mailu, znovu odešlete jednorázové heslo.
V uživatelském rozhraní přidejte tlačítko, jehož událost výběru spustí přihlášení, jak je znázorněno v následujícím fragmentu kódu:
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() } } } }
Pokud uživatel nemusí odesílat heslo, například když se uživatel přihlásí pomocí e-mailu a hesla, použijte následující fragment kódu:
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() } } }
- Pokud chcete spustit tok přihlášení, použijte sadu SDK
signIn(username)
nebosignIn(username, password)
metodu. - Parametr metody je pak e-mailová adresa,
username
kterou shromažďujete od uživatele. - Pokud je přihlašovací metoda uživatelské jméno (e-mail) a heslo, parametr metody je heslo,
password
které od uživatele shromažďujete. - Ve většině běžných scénářů
signIn(username)
vrátí nebosignIn(username, password)
vrátí výsledek, který značí,SignInResult.CodeRequired
že sada SDK očekává, že aplikace odešle e-mail jednorázovým heslem odeslaný na e-mailovou adresu uživatele. - Objekt
SignInResult.CodeRequired
obsahuje nový odkaz na stav, který můžeme načíst prostřednictvímactionResult.nextState
. - Nový stav nám dává přístup ke dvěma novým metodám:
submitCode()
odešle jednorázový přístupový kód e-mailu, který aplikace shromažďuje od uživatele.resendCode()
Odešle e-mail jednorázový přístupový kód, pokud uživatel kód neobdrží.
- Pokud chcete spustit tok přihlášení, použijte sadu SDK
Zpracování chyb přihlášení
Během přihlašování nejsou všechny akce úspěšné. Uživatel se například může pokusit přihlásit pomocí e-mailové adresy, která neexistuje, nebo odeslat neplatný kód.
Zpracování chyb při spuštění přihlášení
K zpracování chyb v signIn(username)
metodě nebo signIn(username, password)
použití následujícího fragmentu kódu:
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
označuje neúspěšný výsledek akce vrácenýsignIn()
, takže výsledek akce neobsahuje odkaz na nový stav.- Pokud
actionResult is SignUpError
sada Android SDK poskytuje pomocné metody, které vám umožní podrobněji analyzovat konkrétní chyby:- Metoda
isUserNotFound()
zkontroluje, jestli se uživatel přihlásí pomocí uživatelského jména (e-mailové adresy), která neexistuje. - Tato metoda
isBrowserRequired()
zkontroluje potřebu prohlížeče (záložního webového serveru) k dokončení toku ověřování. K tomuto scénáři dochází v případě, že k dokončení toku ověřování nestačí nativní ověřování. Správce například nakonfiguruje jako metodu ověřování e-mail a heslo, ale aplikace neposílá heslo jako typ výzvy nebo ho jednoduše nepodporuje. Při zpracování scénáře, kdy k tomu dojde, použijte postup v aplikaci Pro podporu webového záložního řešení v aplikaci pro Android. - Tato metoda
isAuthNotSupported()
zkontroluje, jestli aplikace odešle typ výzvy, který Microsoft Entra nepodporuje, jedná se o jinou hodnotu typu výzvy než oob a heslo. Přečtěte si další informace o typech úkolů. - V případě uživatelského jména (e-mailu) a přihlášení pomocí hesla metoda
isInvalidCredentials()
zkontroluje, jestli je kombinace uživatelského jména a hesla nesprávná.
- Metoda
Zpracování chyb při odesílání kódu
K zpracování chyb v submitCode()
metodě použijte následující fragment kódu:
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
}
- Tato
SubmitCodeError
chyba označuje neúspěšný výsledek akce vrácenýsubmitCode()
a výsledek akce proto neobsahuje odkaz na nový stav. - Kontroly
isInvalidCode()
konkrétní chyby. V tomto případě musí být předchozí odkaz na stav použit k opětovnému provedení akce.
K načtení nového jednorázového hesla e-mailu použijte následující fragment kódu:
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
)
}
Dokončili jste všechny potřebné kroky k úspěšnému přihlášení uživatele ve vaší aplikaci. Sestavte a spusťte aplikaci. Pokud je všechno v pořádku, měli byste být schopni poskytnout e-mail, přijmout kód e-mailu a použít ho k úspěšnému přihlášení uživatele.
Deklarace identity tokenu ID pro čtení
Jakmile vaše aplikace získá token ID, můžete načíst deklarace identity přidružené k aktuálnímu účtu. K tomu použijte následující fragment kódu.
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")
Klíč, který používáte pro přístup k hodnotě deklarace identity, je název, který zadáte při přidání atributu uživatele jako deklarace identity tokenu.
Pokud chcete zjistit, jak přidat předdefinované a vlastní atributy jako deklarace identity tokenu v článku Přidání atributů uživatele do deklarací identity tokenů.
Odhlášení uživatele
Pokud se chcete odhlásit uživatele, musíte účet aktuálně uložený v mezipaměti odebrat.
Vytvořte vlastní uživatelské rozhraní, které zahrnuje:
- Tlačítko odhlášení, které uživatel vybere a odešle žádost o odhlášení.
Pokud se chcete odhlásit uživatele, použijte následující kód:
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 } } } }
Zpracování chyb odhlášení
Odhlášení by mělo být bez chyb. Pokud dojde k nějakým chybám, pomocí následujícího fragmentu kódu zkontrolujte výsledek chyby:
val actionResult = accountResult.signOut()
if (actionResult is SignOutResult.Complete) {
// Show sign out successful UI
} else {
// Handle errors
}
Nezapomeňte zahrnout příkazy importu. Android Studio by měl automaticky obsahovat příkazy pro import.
Dokončili jste všechny potřebné kroky k úspěšnému odhlášení uživatele ve vaší aplikaci. Sestavte a spusťte aplikaci. Pokud je všechno v pořádku, měli byste být schopni vybrat tlačítko odhlásit se, abyste se mohli úspěšně odhlásit.
Konfigurace vlastního zprostředkovatele deklarací identity
Pokud chcete přidat deklarace identity z externího systému do tokenu vydaného vaší aplikaci, použijte vlastního zprostředkovatele deklarací identity. Vlastní zprostředkovatel deklarací identity se skládá z vlastního rozšíření ověřování, které volá externí rozhraní REST API pro načtení deklarací identity z externích systémů.
Postupujte podle kroků v části Konfigurace vlastního zprostředkovatele deklarací identity pro přidání deklarací z externího systému do tokenů zabezpečení.
Související obsah
- Kurz: Registrace uživatele pomocí uživatelského jména a atributů uživatele
- Nakonfigurujte vlastního zprostředkovatele deklarací identity.
- Přidejte atributy uživatele jako deklarace identity tokenů.