Ablauf der Authentifizierung in Benutzerpools - Amazon Cognito

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 Domäne haben oder nicht, können Benutzer in den Benutzerpools API authentifizieren. Wenn Sie Ihrem Benutzerpool eine Domain hinzufügen, können Sie die Benutzerpool-Endpunkte verwenden. Die Benutzerpools API unterstützen eine Vielzahl von Autorisierungsmodellen und Anforderungsabläufen für API Anfragen.

Zur Überprüfung der Identität von Benutzern unterstützt Amazon Cognito Authentifizierungsabläufe, die zusätzlich zu Passwörtern neue Aufforderungstypen beinhalten. Die Amazon Cognito Cognito-Authentifizierung erfordert in der Regel, dass Sie zwei API Vorgänge in der folgenden Reihenfolge implementieren:

Public authentication

InitiateAuthund RespondToAuthChallenge sind APIs für die Verwendung mit clientseitigen öffentlichen App-Clients nicht authentifiziert.

Server-side authentication

AdminInitiateAuthund AdminRespondToAuthChallenge erfordern IAM Anmeldeinformationen und eignen sich für serverseitige vertrauliche App-Clients.

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.

Authentication flow diagram showing user, mobile/web app, and user pool interactions for token issuance.

In der Regel generiert Ihre App eine Aufforderung, Informationen von Ihrem Benutzer zu sammeln, und sendet diese Informationen in einer API Anfrage an Amazon Cognito. Stellen Sie sich einen InitiateAuth Ablauf in einem Benutzerpool vor, in dem Sie Ihren Benutzer mit Multi-Faktor-Authentifizierung () konfiguriert haben. MFA

  1. Ihre App fordert den Benutzer zur Eingabe des Benutzernamens und des Passworts auf.

  2. Sie fügen den Benutzernamen und das Passwort als Parameter in InitiateAuth ein.

  3. Amazon Cognito gibt eine SMS_MFA-Abfrage und eine Sitzungskennung zurück.

  4. Ihre App fordert Ihren Benutzer auf, den MFA Code von seinem Telefon einzugeben.

  5. 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. Um Ihre API Anfragen zu einem Authentifizierungsablauf zusammenzufassen, fügen Sie die Sitzungszeichenfolge aus der Antwort auf die vorherige Anfrage in jede nachfolgende Anfrage 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 Sitzungsdauer des Authentifizierungsflusses gelten für die Authentifizierung mit den Amazon Cognito Cognito-BenutzerpoolsAPI. 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.

Amazon Cognito console
So konfigurieren Sie die Dauer der Authentifizierungsablaufsitzung des App-Clients (AWS Management Console)
  1. Wählen Sie auf der Registerkarte App integration (App-Integration) in Ihrem Benutzerpool den Namen Ihres App-Clients aus dem Container App clients and analytics (App-Clients und Analytik) aus.

  2. Wählen Sie Bearbeiten im Container App-Client-Informationen aus.

  3. Ändern Sie den Wert für Sitzungsdauer des Authentifizierungsflusses auf die gewünschte Gültigkeitsdauer in Minuten für SMS MFA Codes. Damit ändert sich auch die Zeit, die einem Benutzer zur Verfügung steht, um eine Authentifizierungsabfrage in Ihrem App-Client abzuschließen.

  4. Wählen Sie Änderungen speichern.

Amazon Cognito API
So konfigurieren Sie die Sitzungsdauer des App-Client-Authentifizierungsflusses (Amazon CognitoAPI)
  1. Bereiten Sie eine UpdateUserPoolClient-Anfrage mit Ihren vorhandenen Benutzerpool-Einstellungen aufgrund einer DescribeUserPoolClient-Anfrage vor. Ihre UpdateUserPoolClient-Anfrage muss alle vorhandenen App-Client-Eigenschaften enthalten.

  2. Ändern Sie den Wert von AuthSessionValidity auf die gewünschte Gültigkeitsdauer in Minuten für SMS MFA Codes. Damit ändert sich auch die Zeit, die einem Benutzer zur Verfügung steht, um eine Authentifizierungsabfrage in Ihrem App-Client abzuschließen.

Weitere Informationen zu App-Clients finden Sie unter Anwendungsspezifische Einstellungen mit App-Clients.

Sie können AWS Lambda Trigger verwenden, um die Art und Weise, wie sich Benutzer authentifizieren, 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, nicht authentifizierten oder IAM -authentifizierten Anmeldeversuchen mit einem Passwort sperrt Amazon Cognito Ihren Benutzer für eine Sekunde. 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.

Clientseitiger Authentifizierungsablauf

Der folgende Vorgang funktioniert für clientseitige Benutzer-Apps, die Sie mit oder dem erstellen. AWS AmplifyAWS SDKs

  1. Der Benutzer gibt den Benutzernamen und das Passwort in der App ein.

  2. Die App ruft den InitiateAuth Vorgang mit dem Nutzernamen und den Angaben zum Secure Remote Password (SRP) auf.

    Dieser API Vorgang gibt die Authentifizierungsparameter zurück.

    Anmerkung

    Die App generiert SRP Details mit den integrierten Amazon Cognito SRP Cognito-Funktionen. AWS SDKs

  3. 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.

  4. Wenn eine Sitzung RespondToAuthChallenge zurückgegeben wird, ruft die App RespondToAuthChallenge erneut auf, diesmal mit der Sitzung und der Challenge-Antwort (z. B. MFA Code).

Serverseitiger Authentifizierungsablauf

Wenn Sie keine Benutzer-App haben, sondern stattdessen ein sicheres Backend oder eine serverseitige Java-, Ruby- oder Node.js- App verwenden, können Sie die authentifizierte serverseitige App API für Amazon Cognito Cognito-Benutzerpools verwenden.

Für serverseitige Apps ist die Benutzerpoolauthentifizierung mit der Authentifizierung für clientseitige Apps vergleichbar, mit Ausnahme von Folgendem:

  • Die serverseitige App ruft den Vorgang auf (anstelle von). AdminInitiateAuth API InitiateAuth Für diesen Vorgang sind AWS Anmeldeinformationen mit Berechtigungen wie cognito-idp:AdminInitiateAuth und cognito-idp:AdminRespondToAuthChallenge erforderlich. Die Operation gibt die erforderlichen Authentifizierungsparameter zurück.

  • Nachdem die serverseitige App über die Authentifizierungsparameter verfügt, ruft sie den AdminRespondToAuthChallenge API Vorgang (anstelle vonRespondToAuthChallenge) auf. Der AdminRespondToAuthChallenge API Vorgang ist nur erfolgreich, wenn Sie Anmeldeinformationen angeben AWS .

Weitere Informationen zum Signieren von Amazon Cognito API Cognito-Anfragen mit AWS Anmeldeinformationen finden Sie unter Signaturprozess für Signature Version 4 in der AWS Allgemeinen Referenz.

Bei den AdminRespondToAuthChallenge API Vorgängen AdminInitiateAuth und können keine username-and-password Benutzeranmeldedaten für die Admin-Anmeldung akzeptiert werden, es sei denn, Sie ermöglichen ihnen ausdrücklich, dies auf eine der folgenden Arten zu tun:

  • Nehmen Sie ALLOW_ADMIN_USER_PASSWORD_AUTH (ehemals als ADMIN_NO_SRP_AUTH bezeichnet) in den Parameter ExplicitAuthFlow beim Aufrufen von CreateUserPoolClient oder UpdateUserPoolClient 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 Anwendungsspezifische Einstellungen mit App-Clients.

Benutzerdefinierter Authentifizierungsablauf

Amazon Cognito Cognito-Benutzerpools ermöglichen auch die Verwendung benutzerdefinierter Authentifizierungsabläufe, mit deren Hilfe Sie mithilfe von Triggern ein Challenge/Response-basiertes Authentifizierungsmodell erstellen können. AWS Lambda

Der benutzerdefinierte Authentifizierungsfluss ermöglicht kundenspezifische Aufforderungs- und Antwortzyklen, um unterschiedliche Anforderungen zu erfüllen. Der Ablauf beginnt mit einem Aufruf des InitiateAuth API Vorgangs, der den zu verwendenden Authentifizierungstyp angibt und alle 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 Informationen zu den RespondToAuthChallenge API Operationen InitiateAuth und finden Sie in der APIDokumentation.

Integrierter Authentifizierungsablauf und Aufforderungen

Amazon Cognito enthält integrierte AuthFlow ChallengeName Werte, sodass ein Standardauthentifizierungsablauf einen Benutzernamen und ein Passwort über das Secure Remote Password (SRP) -Protokoll validieren kann. AWS SDKsSie haben in Amazon Cognito integrierte Unterstützung für diese Flows.

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 den ChallengeName Wert von zurück. SMS_MFA 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. Wenn DefineAuthChallenge CUSTOM_CHALLENGE als nächste Aufforderung zurückgibt, ruft der Authentifizierungsablauf CreateAuthChallenge an. Der CreateAuthChallenge-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 Herausforderungen wie der SRP Passwortverifizierung und MFA -durchführung verwenden. SMS Dabei können benutzerdefinierte Herausforderungen wie CAPTCHA geheime Fragen verwendet werden.

Verwenden Sie die SRP Passwortverifizierung im benutzerdefinierten Authentifizierungsablauf

Wenn Sie die Daten SRP in einen benutzerdefinierten Authentifizierungsablauf einbeziehen möchten, müssen Sie mit beginnenSRP.

  • Um die SRP Passwortverifizierung in einem benutzerdefinierten Ablauf zu initiieren, ruft die App InitiateAuth mit CUSTOM_AUTH as aufAuthflow. In der AuthParameters Map enthält die Anfrage Ihrer App SRP_A: (den SRP A-Wert) undCHALLENGE_NAME: SRP_A.

  • Der CUSTOM_AUTH-Ablauf ruft den DefineAuthChallenge-Lambda-Auslöser mit einer anfänglichen Sitzung von challengeName: SRP_A und challengeResult: true auf. Ihre Lambda-Funktion antwortet mit challengeName: PASSWORD_VERIFIER, issueTokens: false und failAuthentication: false.

  • Als Nächstes muss die App RespondToAuthChallenge with challengeName: PASSWORD_VERIFIER und die anderen SRP in der challengeResponses Map erforderlichen Parameter aufrufen.

  • Wenn Amazon Cognito das Passwort verifiziert, wird RespondToAuthChallenge den DefineAuthChallenge-Lambda-Auslöser mit einer zweiten Sitzung von challengeName: PASSWORD_VERIFIER und challengeResult: true aufrufen. Nun kann der Lambda-Auslöser DefineAuthChallenge mit challengeName: CUSTOM_CHALLENGE reagieren, um die benutzerdefinierte Aufforderung zu starten.

  • Wenn für einen Benutzer aktiviert MFA ist, wird Ihr Benutzer, nachdem Amazon Cognito das Passwort überprüft hat, aufgefordert, es einzurichten oder sich mit ihm anzumelden. MFA

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 besteht darin, die unter Benutzerdefinierter Authentifizierungsablauf mit beschriebenen API Vorgänge SRP zur Passwortverifizierung zu verwenden. AWS SDKsSie verwenden diesen Ansatz, und dieser Ansatz hilft ihnen, ihn zu verwendenSRP. Wenn Sie jedoch SRP Berechnungen vermeiden möchten, stehen alternative API Verwaltungsvorgänge für sichere Backend-Server zur Verfügung. 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 einreichen können, müssen Sie bei der Verwendung dieser Operationen keine SRP Berechnungen durchfü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 standardmäßig verfügbar AWS SDKs, 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 die Passwörter Ihrer Benutzer während der Authentifizierung über eine verschlüsselte SSL Verbindung an den Dienst.

Wenn Sie alle Ihre Benutzer migriert haben, wechseln Sie zu den sichereren SRP Flows. Der SRP Flow 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 mit einem Lambda-Auslöser für die Benutzermigration.