Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
Externí tenanti (další informace)
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 vaší 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.
Abyste mohli přihlásit uživatele, musíte:
Vytvořte uživatelské rozhraní pro:
- Získejte 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řihlašujete pomocí jednorázového hesla zaslaného na e-mail, shromážděte toto heslo od uživatele.
- Pokud se přihlašujete pomocí jednorázového hesla zaslaného e-mailem, doporučujeme znovu odeslat 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 parameters = NativeAuthSignInParameters(username = email) // Assign 'password' param if you sign in with username (email) and password // parameters.password = password val actionResult: SignInResult = authClient.signIn(parameters) 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 getAccessTokenParameters = NativeAuthGetAccessTokenParameters() val accessTokenResult = accountState.getAccessToken(getAccessTokenParameters) 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 parameters = NativeAuthSignInParameters(username = email) parameters.password = password val actionResult: SignInResult = authClient.signIn(parameters) if (actionResult is SignInResult.Complete) -> { // Handle sign in success val accountState = actionResult.resultValue val getAccessTokenParameters = NativeAuthGetAccessTokenParameters() val accessTokenResult = accountState.getAccessToken(getAccessTokenParameters) if (accessTokenResult is GetAccessTokenResult.Complete) { val accessToken = accessTokenResult.resultValue.accessToken val idToken = accountState.getIdToken() } } }- Pokud chcete spustit tok přihlašování, použijte metodu
signIn(parameters)sady SDK. - Instance třídy
NativeAuthSignInParametersobsahujícíusername, která je e-mailovou adresou, kterou od uživatele shromažďujete. - Pokud je přihlašovací metoda uživatelské jméno (e-mail) a heslo, parametr metody
passwordje heslo, které od uživatele shromažďujete. - Ve většině běžných scénářů
signIn(parameters)vrátí výsledek,SignInResult.CodeRequired, což značí, že SDK očekává, že aplikace odešle e-mailem jednorázový přístupový kód, který byl odeslán na e-mailovou adresu uživatele. - Objekt
SignInResult.CodeRequiredobsahuje 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()znovu odešle e-mail s jednorázovým přístupovým kódem, pokud uživatel kód neobdrží.
-
- Pokud chcete spustit tok přihlašování, použijte metodu
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.
Řešení chyb při zahájení přihlášení
K zpracování chyb v metodě signIn(parameters) použijte následující fragment kódu:
val parameters = NativeAuthSignInParameters(username = email)
// Assign 'password' param if you sign in with username (email) and password
// parameters.password = password
val actionResult: SignInResult = authClient.signIn(parameters)
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
}
}
}
-
SignInErroroznačuje neúspěšný výsledek akce vrácenýsignIn(parameters), 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í dále 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. - Metoda
isBrowserRequired()zkontroluje potřebu prohlížeče (záložního webu) 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. Použijte postup uvedený v Podpora webové zálohy v aplikaci pro Android při zpracování scénáře, kdy k tomu dojde. - 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 výzvy . - U 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
Řešení chyb odesílání kódu
K zpracování chyb v metodě submitCode() 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
}
- Chyba
SubmitCodeErrorznačí neúspěšný výsledek akce vrácenýsubmitCode(), takže výsledek akce neobsahuje odkaz na nový stav. -
isInvalidCode()zkontroluje konkrétní chybu. 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 vaši 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.
Čtení nároků ID tokenu
Jakmile vaše aplikace získá identifikační token, můžete načíst nároky spojené s aktuálním účtem. 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 deklaraci tokenu identity.
Chcete-li se naučit, jak přidat předdefinované a vlastní atributy jako deklarace identity tokenů, podívejte se na článek 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 vaši 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.
Nakonfigurujte vlastního poskytovatele deklarací
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 nároků se skládá z vlastního rozšíření pro ověřování, které volá externí rozhraní REST API pro načtení nároků z externích systémů.
Postupujte podle kroků v části Konfigurace vlastního poskytovatele deklarací pro přidání deklarací z externího systému do bezpečnostních tokenů.
Povolení přihlášení pomocí aliasu nebo uživatelského jména
Uživatelům, kteří se přihlašují pomocí e-mailové adresy a hesla, můžete také povolit přihlášení pomocí uživatelského jména a hesla. Uživatelské jméno označované také jako alternativní přihlašovací identifikátor může být ID zákazníka, číslo účtu nebo jiný identifikátor, který se rozhodnete použít jako uživatelské jméno.
Uživatelské jména můžete k uživatelskému účtu přiřadit ručně prostřednictvím Centra pro správu Microsoft Entra nebo ho v aplikaci automatizovat prostřednictvím rozhraní Microsoft Graph API.
Pomocí postupu přihlášení pomocí aliasu nebo článku o uživatelském jménu můžete uživatelům povolit přihlášení pomocí uživatelského jména ve vaší aplikaci:
- Povolte přihlášení pomocí uživatelského jména.
- Vytvořte uživatele s uživatelským jménem v Centru pro správu nebo aktualizujte stávající uživatele přidáním uživatelského jména. Alternativně můžete také automatizovat vytváření a aktualizace uživatelů ve vaší aplikaci pomocí rozhraní Microsoft Graph API.