Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
Externe Mandanten (weitere Informationen)
In diesem Tutorial wird veranschaulicht, wie Sie Benutzer mithilfe eines E-Mail-Einmal-Passcodes oder Benutzername und Kennwort bei Ihrer mobilen Android-App mit nativer Authentifizierung anmelden und abmelden.
In diesem Tutorial führen Sie Folgendes durch:
- Melden Sie einen Benutzer mithilfe eines E-Mail-Einmal-Passcodes oder mit Benutzername (E-Mail-Adresse) und Kennwort an.
- Abmelden eines Benutzenden.
- Sign-In-Fehler beheben
Voraussetzungen
- Schließen Sie die Schritte unter Tutorial: Vorbereiten Ihrer Android-App für die native Authentifizierung ab. In diesem Tutorial erfahren Sie, wie Sie Ihr Android-Projekt oder Ihre Android-App für die native Authentifizierung vorbereiten.
Anmelden eines Benutzers
Wenn Sie einen Benutzer mithilfe eines Einmal-Passcode anmelden möchten, erfassen Sie die E-Mail-Adresse, und senden Sie eine E-Mail mit einem Einmal-Passcode, damit der Benutzer seine E-Mail-Adresse bestätigen kann. Wenn der Benutzende einen gültigen Einmal-Passcode eingibt, meldet die App ihn an.
Um einen Benutzer mit Benutzername (E-Mail) und Kennwort anzumelden, erfassen Sie die E-Mail und das Kennwort des Benutzers. Wenn der Benutzername und das Kennwort gültig sind, meldet sich die App beim Benutzer an.
Um sich bei einem Benutzer anzumelden, müssen Sie:
Eine Benutzeroberfläche für Folgendes erstellen:
- Erfassen einer E-Mail-Adresse des Benutzers. Fügen Sie eine Validierung für die Eingaben hinzu, um sicherzustellen, dass der Benutzer eine gültige E-Mail-Adresse eingibt.
- Erfassen eines Kennworts, wenn das Anmelden mit Benutzername (E-Mail-Adresse) und Kennwort erfolgt.
- Sammeln Sie einen Einmal-Passcode aus der von der benutzenden Person gesendete E-Mail, wenn Sie sich mit einer Einmal-Passcode per E-Mail anmelden.
- Erneutes Senden einer Einmalkennung (empfohlen), wenn Sie sich mit einer Einmalkennung per E-Mail anmelden.
Fügen Sie auf der Benutzeroberfläche eine Schaltfläche hinzu, deren Auswahlereignis eine Anmeldung startet, wie im folgenden Codeschnipsel gezeigt:
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() } } } }Wenn der Benutzer keine Kennung senden muss, z. B. wenn sich ein Benutzer mit E-Mail und Kennwort anmeldet, verwenden Sie den folgenden Codeausschnitt:
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() } } }- Verwenden Sie die
signIn(parameters)-Methode des SDK, um den Anmeldeablauf zu starten. - Eine Instanz der
NativeAuthSignInParametersKlasse, die dieusernameenthält, die die E-Mail-Adresse darstellt, die Sie vom Benutzer sammeln. - Wenn die Anmeldemethode Benutzername (E-Mail) und Kennwort ist, ist der Parameter der Methode
passworddann das Kennwort, das Sie vom Benutzer sammeln. - In den häufigsten Szenarien gibt die
signIn(parameters)ein Ergebnis zurück,SignInResult.CodeRequired, was angibt, dass das SDK erwartet, dass die App die E-Mail-Einmalkennung sendet, die an die E-Mail-Adresse des Benutzers gesendet wird. - Das Objekt
SignInResult.CodeRequiredenthält einen Verweis auf den neuen Zustand, den Sie überactionResult.nextStateabrufen können. - Der neue Zustand gibt Ihnen Zugriff auf zwei neue Methoden:
-
submitCode()sendet den E-Mail-Einmal-Passcode, den die App vom Benutzer erfasst. -
resendCode()sendet den E-Mail-Einmal-Passcode erneut, wenn der Benutzer den Code nicht empfängt.
-
- Verwenden Sie die
Behandeln von Anmeldefehlern
Bei der Anmeldung sind nicht alle Aktionen erfolgreich. Beispielsweise kann der Benutzende versuchen, sich mit einer E-Mail-Adresse anzumelden, die nicht vorhanden ist oder einen ungültigen Code sendet.
Behandeln von Fehlern beim Starten der Anmeldung
Verwenden Sie den folgenden Codeausschnitt, um Fehler in der signIn(parameters)-Methode zu behandeln:
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
}
}
}
-
SignInErrorgibt ein erfolgloses Aktionsergebnis an, das vonsignIn(parameters)zurückgegeben wird, daher enthält das Aktionsergebnis keinen Verweis auf den neuen Zustand. - Bei
actionResult is SignUpErrorstellt das Android SDK Hilfsmethoden bereit, mit denen Sie die spezifischen Fehler weiter analysieren können:- Die Methode
isUserNotFound()überprüft, ob sich der Benutzer mit einem Benutzernamen (E-Mail-Adresse) anmeldet, der nicht vorhanden ist. - Die Methode
isBrowserRequired()überprüft die Notwendigkeit eines Browsers (Webfallback), um den Authentifizierungsflow abzuschließen. Dieses Szenario tritt auf, wenn die native Authentifizierung nicht ausreicht, um den Authentifizierungsflow abzuschließen. Beispielsweise kann ein Administrator E-Mail und Kennwort als Authentifizierungsmethode konfigurieren, die App sendet jedoch nicht das Kennwort als Aufforderungstyp oder unterstützt dies einfach nicht. Führen Sie die Schritte unter Unterstützen von Webfallback in Android-Apps aus, um ein Szenario zu behandeln, in dem dies auftritt. - Die Methode
isAuthNotSupported()überprüft, ob die App einen Aufforderungstyp sendet, den Microsoft Entra nicht unterstützt. Dabei handelt es sich um Aufforderungstypwerte außer oob und Kennwort. Erfahren Sie mehr über Aufforderungstypen. - Bei der Anmeldung mit Benutzername (E-Mail) und Kennwort überprüft die Methode
isInvalidCredentials(), ob die Kombination aus Benutzername und Kennwort falsch ist.
- Die Methode
Behandeln von Fehler beim Übermitteln von Code
Verwenden Sie den folgenden Codeschnipsel, um Fehler bei der Methode submitCode() zu behandeln:
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
}
- Der Fehler
SubmitCodeErrorgibt ein erfolgloses Aktionsergebnis an, das vonsubmitCode()zurückgegeben wird, daher enthält das Aktionsergebnis keinen Verweis auf den neuen Zustand. -
isInvalidCode()sucht nach dem spezifischen Fehler. In diesem Fall muss der Verweis auf den vorherigen Zustand verwendet werden, um die Aktion erneut auszuführen.
Verwenden Sie den folgenden Codeschnipsel, um den neuen E-Mail-Einmal-Passcode abzurufen:
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
)
}
Sie haben alle notwendigen Schritte zur erfolgreichen Anmeldung eines Benutzenden in Ihrer Anwendung durchgeführt. Erstellen Sie Ihre Anwendung, und führen Sie sie aus. Wenn alles in Ordnung ist, sollten Sie in der Lage sein, eine E-Mail anzugeben, einen Code per E-Mail zu erhalten und mit diesem den Benutzer erfolgreich anzumelden.
Lesen von ID-Tokenansprüchen
Sobald Ihre App ein ID-Token abruft, können Sie die dem aktuellen Konto zugeordneten Ansprüche abrufen. Verwenden Sie dazu den folgenden Codeschnipsel.
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")
Der Schlüssel, den Sie für den Zugriff auf den Anspruchswert verwenden, ist der Name, den Sie beim Hinzufügen des Benutzerattributs als Tokenanspruch angeben.
Informationen zum Hinzufügen integrierter und benutzerdefinierter Attribute als Tokenansprüche finden Sie im Artikel Hinzufügen von Benutzerattributen zu Tokenansprüchen.
Abmelden eines Benutzers
Um einen Benutzer abzumelden, müssen Sie das aktuell im Cache gespeicherte Konto entfernen.
Erstellen Sie Ihre benutzerdefinierte Benutzeroberfläche, die Folgendes umfasst:
- Eine Schaltfläche zum Abmelden, die der Benutzer zum Senden einer Abmeldeanforderung auswählt
Verwenden Sie zum Abmelden eines Benutzenden den folgenden Code:
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 } } } }
Behandeln von Abmeldefehlern
Abmelden sollte fehlerfrei sein. Wenn Fehler auftreten, überprüfen Sie das Fehlerergebnis mithilfe des folgenden Codeschnipsels:
val actionResult = accountResult.signOut()
if (actionResult is SignOutResult.Complete) {
// Show sign out successful UI
} else {
// Handle errors
}
Stellen Sie sicher, dass Sie die Importanweisungen hinzufügen. Android Studio sollte die Importanweisungen automatisch enthalten.
Sie haben alle erforderlichen Schritte abgeschlossen, um einen Benutzenden von Ihrer Anwendung erfolgreich abzumelden. Erstellen Sie Ihre Anwendung, und führen Sie sie aus. Wenn alles gut ist, sollten Sie die Schaltfläche Abmelden auswählen können, um sich erfolgreich abzumelden.
Konfigurieren eines benutzerdefinierten Anspruchsanbieters
Wenn Sie Ansprüche aus einem externen System in das Token einfügen möchten, das an Ihre Anwendung ausgegeben wird, verwenden Sie einen benutzerdefinierten Anspruchsanbieter. Ein benutzerdefinierter Anspruchsanbieter besteht aus einer benutzerdefinierten Authentifizierungserweiterung, die eine externe REST-API aufruft, um Ansprüche aus externen Systemen abzurufen.
Führen Sie die Schritte unter Konfigurieren eines benutzerdefinierten Anspruchsanbieters durch, um Ansprüche aus einem externen System zu Ihren Sicherheitstoken hinzuzufügen.
Aktivieren der Anmeldung mit einem Alias oder Benutzernamen
Sie können Benutzern, die sich mit einer E-Mail-Adresse und einem Kennwort anmelden, auch die Möglichkeit geben, sich mit einem Benutzernamen und Kennwort anzumelden. Der Benutzername wird auch als alternativer Anmeldebezeichner bezeichnet, kann eine Kunden-ID, Kontonummer oder ein anderer Bezeichner sein, den Sie als Benutzernamen verwenden möchten.
Sie können dem Benutzerkonto Benutzernamen manuell über das Microsoft Entra Admin Center zuweisen oder in Ihrer App über die Microsoft Graph-API automatisieren.
Führen Sie die Schritte im Artikel 'Anmelden mit einem Alias oder Benutzernamen' aus, um Ihren Benutzern die Anmeldung mit einem Benutzernamen in Ihrer Anwendung zu ermöglichen.
- Aktivieren Sie die Anmeldung mit dem Benutzernamen.
- Erstellen Sie Benutzer mit Benutzername im Admin Center , oder aktualisieren Sie vorhandene Benutzer, indem Sie einen Benutzernamen hinzufügen. Alternativ können Sie auch die Benutzererstellung und -aktualisierung in Ihrer App mithilfe der Microsoft Graph-API automatisieren.