Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Ablauf der Authentifizierung in Benutzerpools
Amazon Cognito umfasst mehrere Methoden zur Authentifizierung Ihrer Benutzer. Alle Benutzerpools, unabhängig davon, ob Sie eine Domain haben oder nicht, können Benutzer in der Benutzerpool-API authentifizieren. Wenn Sie Ihrem Benutzerpool eine Domain hinzufügen, können Sie die Benutzerpool-Endpunkte verwenden. Die Benutzerpool-API unterstützt eine Vielzahl von Autorisierungsmodellen und Anforderungsabläufen für API-Anforderungen.
Zur Überprüfung der Identität von Benutzern unterstützt Amazon Cognito Authentifizierungsabläufe, die zusätzlich zu Passwörtern neue Aufforderungstypen beinhalten. Für die Amazon Cognito-Authentifizierung müssen Sie normalerweise zwei API-Vorgänge in der folgenden Reihenfolge implementieren:
Ein Benutzer führt die Authentifizierung durch Beantwortung aufeinanderfolgender Eingabeaufforderungen durch, bis die Authentifizierung entweder fehlschlägt oder Amazon Cognito Token für den Benutzer ausgestellt. Sie können diese Schritte mit Amazon Cognito in einem Prozess wiederholen, der verschiedene Aufforderungen zur Unterstützung benutzerdefinierter Authentifizierungsabläufe beinhaltet.
![](images/cognito-user-pool-auth-flow-srp.png)
In der Regel generiert Ihre App eine Aufforderung, Informationen von Ihrem Benutzer zu erfassen, und sendet diese Informationen in einer API-Anforderung an Amazon Cognito. Betrachten Sie einen InitiateAuth
-Ablauf in einem Benutzerpool, in dem Sie Ihren Benutzer mit Multi-Faktor-Authentifizierung (MFA) konfiguriert haben.
-
Ihre App fordert den Benutzer zur Eingabe des Benutzernamens und des Passworts auf.
-
Sie fügen den Benutzernamen und das Passwort als Parameter in
InitiateAuth
ein. -
Amazon Cognito gibt eine
SMS_MFA
-Abfrage und eine Sitzungskennung zurück. -
Ihre App fordert Ihren Benutzer auf, den MFA-Code von seinem Telefon einzugeben.
-
Sie fügen diesen Code und die Sitzungskennung in die
RespondToAuthChallenge
-Anforderung ein.
Abhängig von den Funktionen Ihres Benutzerpools können Sie am Ende auf verschiedene Abfragen von InitiateAuth
reagieren, bevor Ihre App Token von Amazon Cognito abruft. Amazon Cognito fügt in der Antwort auf jede Anforderung eine Sitzungszeichenfolge ein. Wenn Sie Ihre API-Anforderungen zu einem Authentifizierungsfluss kombinieren möchten, fügen Sie die Sitzungszeichenfolge aus der Antwort auf die vorherige Anforderung in jede nachfolgende Anforderung ein. Standardmäßig haben Ihre Benutzer für den Abschluss einer Abfrage drei Minuten Zeit, bevor die Sitzungszeichenfolge abläuft. Wenn Sie diesen Zeitraum anpassen möchten, ändern Sie Ihren App-Client Authentication flow session duration (Dauer der Authentifizierungsablaufsitzung). Im folgenden Verfahren wird beschrieben, wie diese Einstellung in Ihrer App-Client-Konfiguration geändert wird.
Anmerkung
Die Einstellungen für die Dauer der Sitzung zum Authentifizierungsablauf gelten für die Authentifizierung mit der Amazon-Cognito-Benutzerpool-API. Die von Amazon Cognito gehostete Benutzeroberfläche legt die Sitzungsdauer für die Multi-Faktor-Authentifizierung auf 3 Minuten und für Codes zum Zurücksetzen des Passworts auf 8 Minuten fest.
Weitere Informationen zu App-Clients finden Sie unter App-Clients für Benutzerpools.
Sie können AWS Lambda Auslöser verwenden, um die Authentifizierung von Benutzern anzupassen. Diese Auslöser geben ihre eigenen Eingabeaufforderungen im Rahmen des Authentifizierungsablaufs aus und überprüfen sie.
Sie können auch den Admin-Authentifizierungsablauf für sichere Backend-Server verwenden. Mit dem Authentifizierungsablauf für die Benutzermigration können Sie die Migration von Benutzern ermöglichen, ohne dass Ihre Benutzer ihre Passwörter zurücksetzen müssen.
Sperrverhalten von Amazon Cognito bei fehlgeschlagenen Anmeldeversuchen
Nach fünf fehlgeschlagenen Anmeldeversuchen (ohne Authentifizierung oder mit IAM-Authentifizierung) mit einem Passwort sperrt Amazon Cognito den Benutzer eine Sekunde lang. Die Sperrdauer verdoppelt sich dann nach jedem weiteren fehlgeschlagenen Versuch bis zu einer maximalen Dauer von ca. 15 Minuten. Anmeldeversuche während einer Sperrperiode führen zu einer Ausnahme Password attempts exceeded
und wirken sich nicht auf die Dauer nachfolgender Sperrperioden aus. Bei einer kumulativen Anzahl fehlgeschlagener Anmeldeversuche n, Ausnahmen Password attempts
exceeded
nicht eingeschlossen, sperrt Amazon Cognito Ihren Benutzer für 2^(n-5) Sekunden. Um die Sperre zurückzusetzen (n=0), muss sich Ihr Benutzer danach entweder erfolgreich anmelden oder darf 15 Minuten lang keine Anmeldeversuche unternehmen. Änderungen an diesem Verhalten sind vorbehalten. Dieses Verhalten gilt nicht für benutzerdefinierte Challenges, es sei denn, diese führen auch eine passwortbasierte Authentifizierung durch.
Themen
- Clientseitiger Authentifizierungsablauf
- Serverseitiger Authentifizierungsablauf
- Benutzerdefinierter Authentifizierungsablauf
- Integrierter Authentifizierungsablauf und Aufforderungen
- Benutzerdefinierter Authentifizierungsablauf und Aufforderungen
- Verwenden der SRP-Passwortverifizierung im benutzerdefinierten Authentifizierungsablauf
- Ablauf der Administratorauthentifizierung
- Ablauf der Authentifizierung für die Benutzermigration
Clientseitiger Authentifizierungsablauf
Der folgende Prozess funktioniert für clientseitige Benutzeranwendungen, die Sie mit AWS Amplify
-
Der Benutzer gibt den Benutzernamen und das Passwort in der App ein.
-
Die App ruft die
InitiateAuth
-Operation mit dem Benutzernamen und den SRP-Details (Secure Remote Password) des Benutzers auf.Diese API-Operation gibt die Authentifizierungsparameter zurück.
Anmerkung
Die App generiert SRP-Details mit den Amazon Cognito SRP-Funktionen, die in AWS -SDKs integriert sind.
-
Die App ruft die
RespondToAuthChallenge
-Operation auf. Wenn der Aufruf erfolgreich ist, gibt Amazon Cognito die Token des Benutzers zurück. Damit ist der Authentifizierungsablauf abgeschlossen.Wenn Amazon Cognito eine weitere Abfrage erfordert, gibt der Aufruf von
RespondToAuthChallenge
keine Token zurück. Stattdessen gibt der Aufruf eine Sitzung zurück. -
Wenn
RespondToAuthChallenge
eine Sitzung zurückgibt, ruft die AppRespondToAuthChallenge
erneut auf, dieses Mal mit der Sitzung und der Abfrageantwort (z. B. MFA-Code).
Serverseitiger Authentifizierungsablauf
Wenn Sie nicht über eine Benutzeranwendung verfügen, sondern ein sicheres Java-, Ruby- oder Node.js-Backend oder eine serverseitige App verwenden, können Sie die authentifizierte, serverseitige API für Amazon-Cognito-Benutzerpools nutzen.
Für serverseitige Apps ist die Benutzerpoolauthentifizierung mit der Authentifizierung für clientseitige Apps vergleichbar, mit Ausnahme von Folgendem:
-
Die serverseitige App ruft die
AdminInitiateAuth
-API-Operation auf (anstelle vonInitiateAuth
). Für diesen Vorgang sind AWS Anmeldeinformationen mit Berechtigungen erforderlich, diecognito-idp:AdminInitiateAuth
und enthaltencognito-idp:AdminRespondToAuthChallenge
. Die Operation gibt die erforderlichen Authentifizierungsparameter zurück. -
Nachdem die serverseitige App über die Authentifizierungsparameter verfügt, ruft sie die
AdminRespondToAuthChallenge
-API-Operation (anstelle vonRespondToAuthChallenge
) auf. DerAdminRespondToAuthChallenge
API-Vorgang ist nur erfolgreich, wenn Sie AWS Anmeldeinformationen angeben.
Weitere Informationen zum Signieren von Amazon Cognito-API-Anforderungen mit - AWS Anmeldeinformationen finden Sie unter Signaturprozess mit Signaturversion 4 in der AWS Allgemeinen Referenz zu .
Die - AdminInitiateAuth
und -AdminRespondToAuthChallenge
API-Operationen können keine username-and-password Benutzeranmeldeinformationen für die Administratoranmeldung akzeptieren, es sei denn, Sie aktivieren dies ausdrücklich auf eine der folgenden Arten:
-
Nehmen Sie
ALLOW_ADMIN_USER_PASSWORD_AUTH
(ehemals alsADMIN_NO_SRP_AUTH
bezeichnet) in den ParameterExplicitAuthFlow
beim Aufrufen vonCreateUserPoolClient
oderUpdateUserPoolClient
auf. -
Fügen Sie
ALLOW_ADMIN_USER_PASSWORD_AUTH
der Liste der Authentifizierungsabläufe für Ihren App-Client hinzu. Konfigurieren Sie App-Clients auf dem Tab App integration (App-Integration) in Ihrem Benutzerpool unter App clients and analytics (App-Clients und Analytik). Weitere Informationen finden Sie unter App-Clients für Benutzerpools.
Benutzerdefinierter Authentifizierungsablauf
Amazon Cognito-Benutzerpools ermöglichen auch die Verwendung benutzerdefinierter Authentifizierungsabläufe, mit denen Sie mithilfe von AWS Lambda Auslösern ein auf Aufforderungen/Antworten basierendes Authentifizierungsmodell erstellen können.
Anmerkung
Sie können die erweiterten Sicherheitsfunktionen nicht für kompromittierte Anmeldeinformationen und die adaptive Authentifizierung mit benutzerdefinierten Authentifizierungsabläufen verwenden. Weitere Informationen finden Sie unter Hinzufügen erweiterter Sicherheit zu einem Benutzerpool..
Der benutzerdefinierte Authentifizierungsfluss ermöglicht kundenspezifische Aufforderungs- und Antwortzyklen, um unterschiedliche Anforderungen zu erfüllen. Der Ablauf beginnt mit dem Aufruf der InitiateAuth
-API-Operation, die den zu verwendenden Authentifizierungstyp angibt und die anfänglichen Authentifizierungsparameter bereitstellt. Amazon Cognito antwortet auf den InitiateAuth
-Aufruf mit einer der folgenden Arten von Informationen:
-
Mit einer Aufforderung für den Benutzer sowie einer Sitzung und Parametern.
-
Mit einem Fehler, wenn der Benutzer nicht authentifiziert werden konnte
-
Mit einem ID-, Zugriffs- und Aktualisierungstoken, wenn die angegebenen Parameter im
InitiateAuth
-Aufruf ausreichen, um den Benutzer anzumelden. (Normalerweise muss der Benutzer oder die App zuerst eine Herausforderung beantworten, aber Ihr benutzerdefinierter Code muss dies bestimmen.)
Wenn Amazon Cognito auf den InitiateAuth
-Aufruf mit einer Aufforderung antwortet, sammelt die App weitere Eingaben und ruft die RespondToAuthChallenge
-Operation auf. Dieser Aufruf liefert die Antworten auf die Aufforderungen und gibt sie an die Sitzung zurück. Amazon Cognito reagiert auf den RespondToAuthChallenge
-Aufruf ähnlich wie auf den InitiateAuth
-Aufruf. Wenn sich der Benutzer angemeldet hat, stellt Amazon Cognito Token bereit. Wenn der Benutzer hingegen nicht angemeldet ist, zeigt Amazon Cognito eine weitere Aufforderung oder einen Fehler an. Wenn Amazon Cognito eine weitere Aufforderung zurückgibt, wiederholt sich die Sequenz und die App ruft RespondToAuthChallenge
auf, bis sich der Benutzer erfolgreich angemeldet hat oder ein Fehler angezeigt wird. Weitere Details finden Sie in der API-Dokumentation für die API-Operationen InitiateAuth
und RespondToAuthChallenge
.
Integrierter Authentifizierungsablauf und Aufforderungen
Amazon Cognito enthält integrierte AuthFlow
- und ChallengeName
-Werte, so dass ein standardmäßiger Authentifizierungsablauf einen Benutzernamen und ein Passwort über das Secure Remote Password (SRP)-Protokoll validieren kann. Die AWS SDKs bieten integrierte Unterstützung für diese Flows mit Amazon Cognito .
Der Flow beginnt mit dem Senden von USER_SRP_AUTH
als AuthFlow
an InitiateAuth
. Sie können auch USERNAME
- und SRP_A
-Werte in AuthParameters
senden. Wenn der InitiateAuth
-Aufruf erfolgreich ist, enthält die Antwort PASSWORD_VERIFIER
als ChallengeName
und SRP_B
in den Herausforderungsparametern. Die App ruft dann RespondToAuthChallenge
mit dem PASSWORD_VERIFIER
ChallengeName
und den erforderlichen Parametern in ChallengeResponses
auf. Wenn der Aufruf von RespondToAuthChallenge
erfolgreich ist und sich der Benutzer anmeldet, stellt Amazon Cognito Token aus. Wenn Sie die Multi-Faktor-Authentifizierung (MFA) für den Benutzer aktiviert haben, gibt Amazon Cognito die ChallengeName
von SMS_MFA
aus. Die App kann den erforderlichen Code durch einen anderen Anruf an RespondToAuthChallenge
ausstellen.
Benutzerdefinierter Authentifizierungsablauf und Aufforderungen
Eine App kann einen benutzerdefinierten Authentifizierungsfluss durch Aufrufen von InitiateAuth
mit CUSTOM_AUTH
als Authflow
initiieren. Bei einem benutzerdefinierten Authentifizierungsablauf steuern drei Lambda-Auslöser die Aufforderungen und die Verifizierung der Antworten.
-
Der
DefineAuthChallenge
-Lambda-Auslöser verwendet ein Sitzungs-Array mit früheren Aufforderungen und Antworten als Eingabe. Anschließend generiert er den nächsten Aufforderungsnamen und boolesche Werte, die angeben, ob der Benutzer authentifiziert ist und ihm Token gewährt werden können. Dieser Lambda-Auslöser ist ein Zustandsautomat, der den Weg des Benutzers durch die Aufforderungen steuert. -
Der
CreateAuthChallenge
-Lambda-Auslöser verwendet einen Aufforderungsnamen als Eingabe und generiert die Aufforderung sowie Parameter zur Bewertung der Antwort. WennDefineAuthChallenge
CUSTOM_CHALLENGE
als nächste Aufforderung zurückgibt, ruft der AuthentifizierungsablaufCreateAuthChallenge
an. DerCreateAuthChallenge
-Lambda-Trigger übergibt den nächsten Aufforderungstyp im Metadatenparameter der Aufforderung. -
Die
VerifyAuthChallengeResponse
-Lambda-Funktion bewertet die Antwort und gibt einen booleschen Wert zurück, der angibt, ob die Antwort gültig war.
Ein benutzerdefinierter Authentifizierungsablauf kann auch eine Kombination aus integrierten Aufforderungen, z. B. SRP-Passwortverifizierung und MFA via SMS verwenden. Er kann auch benutzerdefinierte Aufforderungen wie CAPTCHA oder geheime Fragen verwenden.
Verwenden der SRP-Passwortverifizierung im benutzerdefinierten Authentifizierungsablauf
Wenn Sie SRP in einen benutzerdefinierten Authentifizierungsablauf einbeziehen möchten, müssen Sie mit SRP beginnen.
-
Um die SRP-Passwortüberprüfung in einem benutzerdefinierten Ablauf zu initiieren, ruft die App
InitiateAuth
mitCUSTOM_AUTH
alsAuthflow
auf. Die Anfrage Ihrer App enthält in derAuthParameters
-KarteSRP_A:
(den SRP-A-Wert) undCHALLENGE_NAME: SRP_A
. -
Der
CUSTOM_AUTH
-Ablauf ruft denDefineAuthChallenge
-Lambda-Auslöser mit einer anfänglichen Sitzung vonchallengeName: SRP_A
undchallengeResult: true
auf. Ihre Lambda-Funktion antwortet mitchallengeName: PASSWORD_VERIFIER
,issueTokens: false
undfailAuthentication: false
. -
Die App muss als Nächstes
RespondToAuthChallenge
mitchallengeName: PASSWORD_VERIFIER
und die anderen Parameter aufrufen, die für SRP in derchallengeResponses
-Zuordnung erforderlich sind. -
Wenn Amazon Cognito das Passwort verifiziert, wird
RespondToAuthChallenge
denDefineAuthChallenge
-Lambda-Auslöser mit einer zweiten Sitzung vonchallengeName: PASSWORD_VERIFIER
undchallengeResult: true
aufrufen. Nun kann der Lambda-AuslöserDefineAuthChallenge
mitchallengeName: CUSTOM_CHALLENGE
reagieren, um die benutzerdefinierte Aufforderung zu starten. -
Wenn MFA für einen Benutzer aktiviert ist und Amazon Cognito das Passwort überprüft hat, wird Ihr Benutzer aufgefordert, die Einrichtung oder Anmeldung mit MFA vorzunehmen.
Anmerkung
Die von Amazon Cognito gehostete Anmeldewebseite kann Lambda-Auslöser für benutzerdefinierte Authentifizierungsaufforderungen nicht aktivieren.
Weitere Informationen zu den Lambda-Auslösern, einschließlich Beispielcode, finden Sie unter Anpassen von Benutzerpool-Workflows mit Lambda-Auslösern.
Ablauf der Administratorauthentifizierung
Die bewährte Methode für die Authentifizierung ist die Verwendung der in Benutzerdefinierter Authentifizierungsablauf beschriebenen API-Operationen mit SRP zur Passwortverifizierung. Die AWS SDKs verwenden diesen Ansatz, und dieser Ansatz hilft ihnen bei der Verwendung von SRP. Wenn Sie jedoch SRP-Berechnungen vermeiden möchten, ist ein alternativer Satz von Administrator-API-Operationen für sichere Backend-Server verfügbar. Verwenden Sie für diese Backend-Administrator-Implementierungen AdminInitiateAuth
anstelle von InitiateAuth
. Verwenden Sie auch AdminRespondToAuthChallenge
anstelle von RespondToAuthChallenge
. Da Sie das Passwort als Klartext übermitteln können, brauchen Sie bei der Verwendung dieser Vorgänge keine SRP-Berechnungen durchzuführen. Ein Beispiel:
AdminInitiateAuth Request { "AuthFlow":"ADMIN_USER_PASSWORD_AUTH", "AuthParameters":{ "USERNAME":"
<username>
", "PASSWORD":"<password>
" }, "ClientId":"<clientId>
", "UserPoolId":"<userPoolId>
" }
Diese Operationen zur Administratorauthentifizierung benötigen Entwickleranmeldeinformationen und verwenden den Signaturprozess mittels AWS
Signature Version 4 (SigV4). Diese Operationen sind in Standard- AWS
-SDKs verfügbar, einschließlich Node.js, was für Lambda-Funktionen praktisch ist. Damit diese Operationen verwendet werden können und Passwörter als Klartext akzeptieren, müssen Sie sie für die App in der Konsole aktivieren. Alternativ können Sie ADMIN_USER_PASSWORD_AUTH
für den ExplicitAuthFlow
-Parameter in Aufrufen von CreateUserPoolClient
oder UpdateUserPoolClient
übergeben. Die InitiateAuth
- und RespondToAuthChallenge
-Operationen akzeptieren ADMIN_USER_PASSWORD_AUTH
AuthFlow
nicht.
In der AdminInitiateAuth
-Antwort ChallengeParameters
enthält das Attribut USER_ID_FOR_SRP
– sofern vorhanden – den tatsächlichen Benutzernamen des Benutzers und keinen Alias (wie etwa E-Mail-Adresse oder Telefonnummer). In dem Aufruf an AdminRespondToAuthChallenge
in den ChallengeResponses
müssen Sie diesen Benutzernamen im Parameter USERNAME
übergeben.
Anmerkung
Da der Ablauf der Administratorauthentifizierung für Implementierungen zur Verwaltung über das Backend verwendet wird, unterstützt er die Geräteverfolgung nicht. Wenn Sie die Geräteverfolgung aktiviert haben, ist die Administratorauthentifizierung erfolgreich, aber jeder Aufruf zum Aktualisieren des Zugriffstokens schlägt fehl.
Ablauf der Authentifizierung für die Benutzermigration
Ein Lambda-Auslöser für die Benutzermigration hilft bei der Migration von Benutzern aus einem Legacy-Benutzerverwaltungssystem in Ihren Benutzerpool. Wenn Sie den USER_PASSWORD_AUTH
-Authentifizierungsablauf auswählen, müssen Benutzer ihre Passwörter während der Benutzermigration nicht zurücksetzen. Dieser Ablauf sendet während der Authentifizierung die Passwörter Ihrer Benutzer über eine verschlüsselte SSL-Verbindung an den Service.
Wenn Sie alle Ihre Benutzer migriert haben, wechseln Sie zu dem sichereren SRP-Ablauf. Der SRP-Ablauf sendet keine Passwörter über das Netzwerk.
Weitere Informationen zu Lambda-Auslösern finden Sie unter Anpassen von Benutzerpool-Workflows mit Lambda-Auslösern.
Weitere Informationen über die Migration von Benutzern über einen Lambda-Auslöser finden Sie unter Importieren von Benutzern in Benutzerpools mit einem Lambda-Auslöser für die Benutzermigration.