Sdílet prostřednictvím


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

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:

  1. 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.
  2. 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) nebo signIn(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í nebo signIn(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ím actionResult.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ží.

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 SignUpErrorsada 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á.

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.

  1. Vytvořte vlastní uživatelské rozhraní, které zahrnuje:

    • Tlačítko odhlášení, které uživatel vybere a odešle žádost o odhlášení.
  2. 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í.