Lambda-Auslöser für die Definition einer Authentifizierungsaufforderung - 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.

Lambda-Auslöser für die Definition einer Authentifizierungsaufforderung

Der Define Auth Challenge Trigger ist eine Lambda-Funktion, die die Abfragesequenz in einem benutzerdefinierten Authentifizierungsablauf beibehält. Sie erklärt den Erfolg oder Misserfolg der Challenge-Sequenz und legt die nächste Challenge fest, falls die Sequenz noch nicht abgeschlossen ist.

Lambda-Auslöser für Aufforderungen
Authentifizierungsaufforderung definieren

Amazon Cognito ruft diesen Auslöser auf, um den benutzerdefinierten Authentifizierungsablauf zu initiieren.

Die Anforderung für diesen Lambda-Auslöser enthält session. Der session-Parameter ist ein Array, das alle Aufforderungen enthält, die dem Benutzer im aktuellen Authentifizierungsprozess präsentiert werden. Die Anfrage enthält auch das entsprechende Ergebnis. Das session-Array speichert Aufforderungsdetails (ChallengeResult) in chronologischer Reihenfolge. Die Aufforderung session[0] stellt die erste Aufforderung dar, die der Benutzer erhält.

Sie können Amazon-Cognito-Benutzerpasswörter überprüfen lassen, bevor es Ihre benutzerdefinierten Herausforderungen ausgibt. Alle Lambda-Trigger, die der Kategorie Authentifizierung der Quotas für die Anforderungsrate zugeordnet sind, werden ausgeführt, wenn Sie die SRP Authentifizierung in einem benutzerdefinierten Challenge-Flow durchführen. Es folgt eine Übersicht über den Prozess:

  1. Ihre App initiiert die Anmeldung, indem InitiateAuth oder AdminInitiateAuth mit der AuthParameters-Karte aufgerufen werden. Parameter müssen CHALLENGE_NAME: SRP_A, und Werte für SRP_A und USERNAME umfassen.

  2. Amazon Cognito ruft Ihren Lambda-Auslöser „Authentifizierungsaufforderung definieren“ mit einer ersten Sitzung auf, die challengeName: SRP_A und challengeResult: true enthält.

  3. Nachdem Sie diese Eingaben empfangen haben, reagiert Ihre Lambda-Funktion mit challengeName: PASSWORD_VERIFIER, issueTokens: false, failAuthentication: false.

  4. Wenn die Kennwortverifizierung erfolgreich ist, ruft Amazon Cognito Ihre Lambda-Funktion erneut mit einer neuen Sitzung auf, die challengeName: PASSWORD_VERIFIER und challengeResult: true enthält.

  5. Ihre Lambda-Funktion initiiert Ihre benutzerdefinierten Aufforderungen, indem sie mit challengeName: CUSTOM_CHALLENGE, issueTokens: false und failAuthentication: false antwortet. Wenn Sie Ihren benutzerdefinierten Authentifizierungsablauf nicht mit Passwortüberprüfung starten möchten, können Sie die Anmeldung mit der AuthParameters-Karte einschließlich CHALLENGE_NAME: CUSTOM_CHALLENGE initiieren.

  6. Die Aufforderungsschleife wird so lange ausgeführt, bis alle Aufforderungen beantwortet sind.

Im Folgenden finden Sie ein Beispiel für eine InitiateAuth Startanfrage, der der benutzerdefinierten Authentifizierung ein Flow vorausgeht. SRP

{ "AuthFlow": "CUSTOM_AUTH", "ClientId": "1example23456789", "AuthParameters": { "CHALLENGE_NAME": "SRP_A", "USERNAME": "testuser", "SRP_A": "[SRP_A]", "SECRET_HASH": "[secret hash]" } }

Definition von Lambda-Auslöserparametern für die Authentifizierungsaufforderung

Die Anforderung, die Amazon Cognito an diese Lambda-Funktion übergibt, ist eine Kombination der folgenden Parameter und der allgemeinen Parameter, die Amazon Cognito allen Anfragen hinzufügt.

JSON
{ "request": { "userAttributes": { "string": "string", . . . }, "session": [ ChallengeResult, . . . ], "clientMetadata": { "string": "string", . . . }, "userNotFound": boolean }, "response": { "challengeName": "string", "issueTokens": boolean, "failAuthentication": boolean } }

Anforderungsparameter für die Definition der Authentifizierungsaufforderung

Wenn Amazon Cognito Ihre Lambda-Funktion aufruft, bietet Amazon Cognito die folgenden Parameter:

userAttributes

Ein oder mehrere Name-Wert-Paare, die Benutzerattribute darstellen.

userNotFound

Ein boolescher Wert, den Amazon Cognito eingibt, wenn PreventUserExistenceErrors für Ihren Benutzerpool-Client auf ENABLED festgelegt ist. Ein Wert von true bedeutet, dass die Benutzer-ID (Benutzername, E-Mail-Adresse usw.) mit keinem vorhandenen Benutzer übereinstimmt. Wenn PreventUserExistenceErrors auf ENABLED gesetzt ist, informiert der Service die App nicht über nicht existierende Benutzer. Wir empfehlen, dass Ihre Lambda-Funktionen dieselbe Benutzererfahrung beibehalten und die Latenz berücksichtigen. Auf diese Weise kann der Aufrufer abweichendes Verhalten nicht erkennen, wenn der Benutzer vorhanden ist oder nicht vorhanden ist.

Sitzung

Ein Array von ChallengeResult-Elementen. Jede enthält die folgenden Elemente:

challengeName

Einer der folgenden Challenge-Typen:CUSTOM_CHALLENGE,SRP_A,PASSWORD_VERIFIER,SMS_MFA,EMAIL_OTP,SOFTWARE_TOKEN_MFA, DEVICE_SRP_AUTHDEVICE_PASSWORD_VERIFIER, oderADMIN_NO_SRP_AUTH.

Wenn Ihre Define Auth Challenge-Funktion eine PASSWORD_VERIFIER Herausforderung für einen Benutzer ausgibt, der die Multifaktor-Authentifizierung eingerichtet hat, folgt Amazon Cognito darauf mit einer SMS_MFAEMAIL_OTP, oder -Aufforderung. SOFTWARE_TOKEN_MFA Dies sind die Eingabeaufforderungen zur Eingabe eines Multi-Faktor-Authentifizierungscodes. Schließen Sie in Ihrer Funktion die Behandlung von Eingabeereignissen aus SMS_MFAEMAIL_OTP, und SOFTWARE_TOKEN_MFA Herausforderungen ein. Sie müssen in Ihrer Define Auth MFA Challenge-Funktion keine Challenges aufrufen.

Wichtig

Wenn Ihre Funktion feststellt, ob ein Benutzer sich erfolgreich authentifiziert hat und Sie Token ausgeben müssen, überprüfen Sie immer den challengeName in Ihrer Define-Auth-Challenge, um sicherzustellen, dass er mit dem erwarteten Wert übereinstimmt.

challengeResult

Setzen Sie diesen Parameter auf true, wenn der Benutzer die Aufforderung erfolgreich abgeschlossen hat. Setzen Sie ihn andernfalls auf false.

challengeMetadata

Ihr Name für die benutzerdefinierte Aufforderung. Nur verwendet, wenn challengeName CUSTOM_CHALLENGEentspricht.

clientMetadata

Ein oder mehrere Schlüssel-Wert-Paare, die Sie als benutzerdefinierte Eingabe für die Lambda-Funktion bereitstellen können, die Sie für den Auslöser für die Authentifizierungsaufforderung definieren. Um diese Daten an Ihre Lambda-Funktion zu übergeben, können Sie den ClientMetadata Parameter in den RespondToAuthChallengeAPIOperationen AdminRespondToAuthChallengeund verwenden. Die Anforderung, die die Abfragefunktion define auth aufruft, enthält keine Daten, die in den Operationen ClientMetadata Parameter in AdminInitiateAuthand übergeben wurden. InitiateAuthAPI

Antwortparameter für die Definition der Authentifizierungsaufforderung

In der Antwort können Sie die nächste Phase des Authentifizierungsvorgangs zurückgeben.

challengeName

Eine Zeichenfolge, die den Namen der nächsten Aufforderung enthält. Wenn dem Benutzer eine neue Aufforderung angezeigt werden soll, geben Sie den Namen der Aufforderung hier an.

issueTokens

Wenn Sie feststellen, dass der Benutzer den Authentifizierungsaufforderungen ausreichend nachgekommen ist, setzen Sie ihn auf true. Wenn der Benutzer den Aufforderungen nicht ausreichend nachgekommen ist, setzen Sie ihn auf false.

failAuthentication

Wenn Sie den aktuellen Authentifizierungsprozess beenden möchten, setzen Sie ihn auf true. Um den aktuellen Authentifizierungsprozess fortzusetzen, setzen Sie ihn auf false.

Beispiel für „Authentifizierungsaufforderung definieren“

Mit diesem Beispiel werden eine Reihe von Aufforderungen für die Authentifizierung definiert. Token werden nur dann ausgegeben, wenn der Benutzer alle Aufforderungen erfolgreich abgeschlossen hat.

Node.js
const handler = async (event) => { if ( event.request.session.length === 1 && event.request.session[0].challengeName === "SRP_A" ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "PASSWORD_VERIFIER"; } else if ( event.request.session.length === 2 && event.request.session[1].challengeName === "PASSWORD_VERIFIER" && event.request.session[1].challengeResult === true ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "CUSTOM_CHALLENGE"; } else if ( event.request.session.length === 3 && event.request.session[2].challengeName === "CUSTOM_CHALLENGE" && event.request.session[2].challengeResult === true ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "CUSTOM_CHALLENGE"; } else if ( event.request.session.length === 4 && event.request.session[3].challengeName === "CUSTOM_CHALLENGE" && event.request.session[3].challengeResult === true ) { event.response.issueTokens = true; event.response.failAuthentication = false; } else { event.response.issueTokens = false; event.response.failAuthentication = true; } return event; }; export { handler };