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 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:

Public authentication

InitiateAuth und RespondToAuthChallenge sind nicht authentifizierte APIs zur Verwendung mit clientseitigen öffentlichen App-Clients.

Server-side authentication

AdminInitiateAuth und 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.

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.

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

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 Authentication flow session duration (Dauer der Authentifizierungsablaufsitzung) auf die Gültigkeitsdauer (in Minuten), die Sie für SMS-MFA-Codes wünschen. 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 aus.

Amazon Cognito API
So konfigurieren Sie die Dauer der Authentifizierungsablaufsitzung (Amazon-Cognito-API)
  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 AuthSessionValidity-Wert auf die Gültigkeitsdauer (in Minuten), die Sie für SMS-MFA-Codes wünschen. 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 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.

Clientseitiger Authentifizierungsablauf

Der folgende Prozess funktioniert für clientseitige Benutzeranwendungen, die Sie mit AWS Amplify oder den AWS -SDKs erstellen.

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

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

  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 RespondToAuthChallenge eine Sitzung zurückgibt, ruft die App RespondToAuthChallenge 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 von InitiateAuth). Für diesen Vorgang sind AWS Anmeldeinformationen mit Berechtigungen erforderlich, die cognito-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 von RespondToAuthChallenge) auf. Der AdminRespondToAuthChallenge 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 -AdminRespondToAuthChallengeAPI-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 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 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. 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 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 mit CUSTOM_AUTH als Authflow auf. Die Anfrage Ihrer App enthält in der AuthParameters-Karte SRP_A: (den SRP-A-Wert) und CHALLENGE_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.

  • Die App muss als Nächstes RespondToAuthChallenge mit challengeName: PASSWORD_VERIFIER und die anderen Parameter aufrufen, die für SRP in der challengeResponses-Zuordnung erforderlich sind.

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