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-Trigger mit benutzerdefiniertem SMS Absender
Wenn Sie Ihrem Benutzerpool einen benutzerdefinierten SMS Absender-Trigger zuweisen, ruft Amazon Cognito statt seines Standardverhaltens eine Lambda-Funktion auf, wenn ein Benutzerereignis das Senden einer Nachricht erfordert. SMS Mit einem benutzerdefinierten Absender-Trigger kann Ihre AWS Lambda Funktion SMS Benachrichtigungen über eine von Ihnen gewählte Methode und einen Anbieter an Ihre Benutzer senden. Der benutzerdefinierte Code Ihrer Funktion muss alle SMS Nachrichten aus Ihrem Benutzerpool verarbeiten und übermitteln.
Dieser Trigger eignet sich für Szenarien, in denen Sie möglicherweise mehr Kontrolle darüber haben möchten, wie Ihr Benutzerpool SMS Nachrichten sendet. Ihre Lambda-Funktion kann den Aufruf von SNS API Amazon-Vorgängen anpassen, z. B. wenn Sie mehrere Originationen IDs oder Kreuzungen verwalten möchten. AWS-Regionen Ihre Funktion kann auch Nachrichten an ein anderes Übermittlungsmedium oder einen Drittanbieter-Service weiterleiten.
Anmerkung
Derzeit können Sie in der Amazon-Cognito-Konsole keine benutzerdefinierten Absender-Trigger zuweisen. Sie können einen Trigger mit dem LambdaConfig
Parameter in einer CreateUserPool
UpdateUserPool
API OR-Anfrage zuweisen.
Führen Sie zur Einrichtung dieses Auslösers die folgenden Schritte aus:
-
Erstellen Sie einen symmetrischen Verschlüsselungsschlüssel in AWS Key Management Service (AWS KMS). Amazon Cognito generiert Geheimnisse — temporäre Passwörter, Bestätigungscodes und Bestätigungscodes — und verwendet diesen Schlüssel dann, um die Geheimnisse zu verschlüsseln. KMS Anschließend können Sie die APIDecrypt-Operation in Ihrer Lambda-Funktion verwenden, um die Geheimnisse zu entschlüsseln und sie im Klartext an den Benutzer zu senden. Das AWS Encryption SDKist ein nützliches Tool für AWS KMS Operationen in Ihrer Funktion.
-
Erstellen Sie eine Lambda-Funktion, die Sie als benutzerdefinierten Sender-Auslöser zuordnen möchten. Erteilen Sie
kms:Decrypt
Berechtigungen für Ihren KMS Schlüssel zur Lambda-Funktionsrolle. -
Gewähren Sie dem Amazon-Cognito-Serviceprinzipal
cognito-idp.amazonaws.com
-Zugriff, um die Lambda-Funktion aufzurufen. -
Schreiben Sie Lambda-Funktionscode, der Ihre Nachrichten an benutzerdefinierte Bereitstellungsmethoden oder Drittanbieter weiterleitet. Um den Verifizierungs- oder Bestätigungscode Ihres Benutzers zuzustellen, dekodieren und entschlüsseln Sie den Wert des
code
-Parameters in der Anforderung mit Base64. Diese Operation erzeugt einen Klartextcode oder ein Passwort, den bzw. das Sie in Ihre Nachricht aufnehmen müssen. -
Aktualisieren Sie den Benutzerpool, damit er einen benutzerdefinierten Lambda-Trigger des Absenders verwendet. Der IAM Principal, der einen Benutzerpool mit einem benutzerdefinierten Absender-Trigger aktualisiert oder erstellt, muss über die Berechtigung verfügen, einen Grant für Ihren KMS Schlüssel zu erstellen. Das folgende
LambdaConfig
Snippet weist benutzerdefinierte Funktionen SMS und E-Mail-Absenderfunktionen zu."LambdaConfig": { "KMSKeyID": "arn:aws:kms:
us-east-1
:123456789012
:key/a6c4f8e2-0c45-47db-925f-87854bc9e357
", "CustomEmailSender": { "LambdaArn": "arn:aws:lambda:us-east-1
:123456789012
:function:MyFunction
", "LambdaVersion": "V1_0" }, "CustomSMSSender": { "LambdaArn": "arn:aws:lambda:us-east-1
:123456789012
:function:MyFunction
", "LambdaVersion": "V1_0" }
Benutzerdefinierte Lambda-Triggerparameter für SMS Absender
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.
Benutzerdefinierte SMS Absenderanforderungsparameter
- Typ
-
Die Anforderungsversion. Für ein benutzerdefiniertes SMS Absenderereignis ist der Wert dieser Zeichenfolge immer
customSMSSenderRequestV1
. - Code
-
Der verschlüsselte Code, den Ihre Funktion entschlüsseln und an Ihren Benutzer senden kann.
- clientMetadata
-
Ein oder mehrere Schlüssel-Wert-Paare, die Sie als benutzerdefinierte Eingabe für den Lambda-Funktionstrigger des benutzerdefinierten SMS Senders bereitstellen können. Um diese Daten an Ihre Lambda-Funktion zu übergeben, können Sie den ClientMetadata Parameter in den RespondToAuthChallengeAPIAktionen AdminRespondToAuthChallengeund verwenden. Amazon Cognito bezieht keine Daten aus dem ClientMetadata Parameter in AdminInitiateAuthund InitiateAuthAPIOperationen in die Anfrage ein, die es an die Post-Authentifizierungsfunktion weiterleitet.
- userAttributes
-
Ein oder mehrere Schlüssel-Wert-Paare, die Benutzerattribute darstellen.
Benutzerdefinierte SMS Antwortparameter des Absenders
Amazon Cognito erwartet keine zusätzlichen Rückgabeinformationen in der Antwort. Ihre Funktion kann API Operationen verwenden, um Ihre Ressourcen abzufragen und zu ändern oder Ereignismetadaten in einem externen System aufzuzeichnen.
Lambda-Trigger mit benutzerdefiniertem SMS Absender aktivieren
Sie können einen benutzerdefinierten SMS Absender-Trigger einrichten, der benutzerdefinierte Logik verwendet, um SMS Nachrichten für Ihren Benutzerpool zu senden. Mit dem folgenden Verfahren wird Ihrem Benutzerpool ein benutzerdefinierter SMS Trigger, ein benutzerdefinierter E-Mail-Trigger oder beides zugewiesen. Nachdem Sie Ihren benutzerdefinierten SMS Absender-Trigger hinzugefügt haben, sendet Amazon Cognito immer Benutzerattribute, einschließlich der Telefonnummer und des Einmalcodes, an Ihre Lambda-Funktion, anstatt das Standardverhalten, das eine SMS Nachricht mit Amazon Simple Notification Service sendet.
Wichtig
Amazon Cognito HTML — maskiert reservierte Zeichen wie <
(<
) und >
(>
) im temporären Passwort Ihres Benutzers. Diese Zeichen können in temporären Passwörtern, die Amazon Cognito an Ihre benutzerdefinierte E-Mail-Senderfunktion sendet, jedoch nicht in temporären Verifizierungscodes vorkommen. Um temporäre Passwörter senden zu können, muss Ihre Lambda-Funktion die Maskierung dieser Zeichen aufheben, nachdem sie das Passwort entschlüsselt hat und bevor sie die Nachricht an Ihren Benutzer sendet.
-
Erstellen Sie einen Verschlüsselungsschlüssel in AWS KMS. Dieser Schlüssel verschlüsselt temporäre Passwörter und Autorisierungscodes, die Amazon Cognito generiert. Sie können diese Secrets dann in der benutzerdefinierten Lambda-Funktion des Senders entschlüsseln, um sie im Klartext an den Benutzer zu senden.
-
Gewähren Sie Amazon Cognito Service Principal
cognito-idp.amazonaws.com
Zugriff, um Codes mit dem KMS Schlüssel zu verschlüsseln.Wenden Sie die folgende ressourcenbasierte Richtlinie auf Ihren Schlüssel an. KMS
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "cognito-idp.amazonaws.com" }, "Action": "kms:CreateGrant", "Resource": "arn:aws:kms:
us-west-2
:111222333444
:key/1example-2222-3333-4444-999example
", "Condition": { "StringEquals": { "aws:SourceAccount": "111222333444
" }, "ArnLike": { "aws:SourceArn": "arn:aws:cognito-idp:us-west-2
:111222333444
:userpool/us-east-1_EXAMPLE
" } } }] } -
Erstellen Sie eine Lambda-Funktion für den benutzerdefinierten Sender-Auslöser. Amazon Cognito verwendet die AWS Verschlüsselung SDK, um die geheimen, temporären Passwörter und Codes zu verschlüsseln, die die Anfragen Ihrer Benutzer autorisieren. API
-
Weisen Sie Ihrer Lambda-Funktion eine IAM Rolle zu, die mindestens über
kms:Decrypt
Berechtigungen für Ihren KMS Schlüssel verfügt.
-
-
Gewähren Sie dem Amazon-Cognito-Serviceprinzipal
cognito-idp.amazonaws.com
-Zugriff, um die Lambda-Funktion aufzurufen.Der folgende AWS CLI Befehl erteilt Amazon Cognito die Erlaubnis, Ihre Lambda-Funktion aufzurufen:
aws lambda add-permission --function-name
lambda_arn
--statement-id "CognitoLambdaInvokeAccess
" --action lambda:InvokeFunction --principal cognito-idp.amazonaws.com -
Erstellen Sie Ihren Lambda-Funktionscode, um Ihre Nachrichten zu senden. Amazon Cognito verwendet AWS Encryption SDK , um Geheimnisse zu verschlüsseln, bevor Amazon Cognito die Geheimnisse an die Lambda-Funktion des benutzerdefinierten Senders sendet. Entschlüsseln Sie in Ihrer Funktion das Secret und verarbeiten Sie alle relevanten Metadaten. Senden Sie dann den Code, Ihre eigene benutzerdefinierte Nachricht und die Zieltelefonnummer an den Benutzer, der Ihre Nachricht zustelltAPI.
-
Fügen Sie das AWS Encryption SDK zu Ihrer Lambda-Funktion hinzu. Weitere Informationen finden Sie unter SDKProgrammiersprachen für AWS Verschlüsselung. Aktualisieren Sie das Lambda-Paket, indem Sie die folgenden Schritte ausführen.
-
Exportieren Sie Ihre Lambda-Funktion als ZIP-Datei in die AWS Management Console.
-
Öffnen Sie Ihre Funktion und fügen Sie die hinzu AWS Encryption SDK. Weitere Informationen und Download-Links finden Sie unter AWS Encryption SDK – Programmiersprachen im Entwicklerhandbuch zum AWS Encryption SDK .
-
Komprimieren Sie Ihre Funktion mit Ihren SDK Abhängigkeiten und laden Sie die Funktion auf Lambda hoch. Weitere Informationen finden Sie unter Bereitstellen von Lambda-Funktionen als ZIP-Dateiarchive im Entwicklerhandbuch zu AWS Lambda .
-
-
Aktualisieren Sie Ihren Benutzerpool, um benutzerdefinierte Lambda-Auslöser hinzuzufügen. Fügen Sie einen
CustomSMSSender
CustomEmailSender
Oder-Parameter in eineUpdateUserPool
API Anfrage ein. DerUpdateUserPool
API Vorgang erfordert alle Parameter Ihres Benutzerpools und die Parameter, die Sie ändern möchten. Wenn Sie nicht alle relevanten Parameter angeben, legt Amazon Cognito die Werte aller fehlenden Parameter auf ihre Standardwerte fest. Schließen Sie entsprechend dem folgenden Beispiel Einträge für alle Lambda-Funktionen ein, die Sie Ihrem Benutzerpool hinzufügen oder im Benutzerpool behalten möchten. Weitere Informationen finden Sie unter Aktualisierung der Benutzerpool- und App-Client-Konfiguration.#Send this parameter in an 'aws cognito-idp update-user-pool' CLI command, including any existing #user pool configurations. --lambda-config "PreSignUp=
lambda-arn
, \ CustomSMSSender={LambdaVersion=V1_0,LambdaArn=lambda-arn
}, \ CustomEmailSender={LambdaVersion=V1_0,LambdaArn=lambda-arn
}, \ KMSKeyID=key-id
"
Um einen benutzerdefinierten Lambda-Sender-Trigger mit einem zu entfernen update-user-pool
AWS CLI, lassen Sie den CustomEmailSender
Parameter CustomSMSSender
oder von weg --lambda-config
und schließen Sie alle anderen Trigger ein, die Sie mit Ihrem Benutzerpool verwenden möchten.
Um einen benutzerdefinierten Lambda-Sender-Trigger mit einer UpdateUserPool
API Anfrage zu entfernen, lassen Sie den CustomEmailSender
Parameter CustomSMSSender
oder aus dem Anforderungstext weg, der den Rest Ihrer Benutzerpoolkonfiguration enthält.
Codebeispiel
Das folgende Beispiel für Node.js verarbeitet ein SMS Nachrichtenereignis in Ihrer benutzerdefinierten SMS Lambda-Absenderfunktion. In diesem Beispiel wird davon ausgegangen, dass Ihre Funktion zwei Umgebungsvariablen definiert hat.
KEY_ALIAS
-
Der Alias des KMS Schlüssels, den Sie zum Verschlüsseln und Entschlüsseln der Benutzercodes verwenden möchten.
KEY_ARN
-
Der Amazon-Ressourcenname (ARN) des KMS Schlüssels, den Sie zum Verschlüsseln und Entschlüsseln Ihrer Benutzercodes verwenden möchten.
const AWS = require('aws-sdk'); const b64 = require('base64-js'); const encryptionSdk = require('@aws-crypto/client-node'); //Configure the encryption SDK client with the KMS key from the environment variables. const { encrypt, decrypt } = encryptionSdk.buildClient(encryptionSdk.CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT); const generatorKeyId = process.env.KEY_ALIAS; const keyIds = [ process.env.KEY_ARN ]; const keyring = new encryptionSdk.KmsKeyringNode({ generatorKeyId, keyIds }) exports.handler = async (event) => { //Decrypt the secret code using encryption SDK. let plainTextCode; if(event.request.code){ const { plaintext, messageHeader } = await decrypt(keyring, b64.toByteArray(event.request.code)); plainTextCode = plaintext } //PlainTextCode now contains the decrypted secret. if(event.triggerSource == 'CustomSMSSender_SignUp'){ //Send an SMS message to your user via a custom provider. //Include the temporary password in the message. } else if(event.triggerSource == 'CustomSMSSender_ResendCode'){ } else if(event.triggerSource == 'CustomSMSSender_ForgotPassword'){ } else if(event.triggerSource == 'CustomSMSSender_UpdateUserAttribute'){ } else if(event.triggerSource == 'CustomSMSSender_VerifyUserAttribute'){ } else if(event.triggerSource == 'CustomSMSSender_AdminCreateUser'){ } else if(event.triggerSource == 'CustomSMSSender_AccountTakeOverNotification'){ } return; };
Themen
Evaluieren Sie die SMS Nachrichtenfunktionen mit einer benutzerdefinierten Absenderfunktion SMS
Eine benutzerdefinierte SMS Lambda-Absenderfunktion akzeptiert die SMS Nachrichten, die Ihr Benutzerpool senden würde, und die Funktion liefert den Inhalt auf der Grundlage Ihrer benutzerdefinierten Logik. Amazon Cognito sendet die Benutzerdefinierte Lambda-Triggerparameter für SMS Absender an Ihre Funktion. Ihre Funktion kann diese Informationen nach Ihren Wünschen verarbeiten. Sie können den Code beispielsweise an ein Amazon Simple Notification Service (AmazonSNS) -Thema senden. Ein SNS Amazon-Thema-Abonnent kann eine SMS Nachricht, ein HTTPS Endpunkt oder eine E-Mail-Adresse sein.
Informationen zum Erstellen einer Testumgebung für Amazon Cognito SMS Messaging mit einer benutzerdefinierten SMS Lambda-Absenderfunktion finden Sie unter amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email
Wenn Sie diese Lösung in einem Benutzerpool bereitstellen, sendet die Lambda-Funktion stattdessen alle Nachrichten, die Amazon Cognito normalerweise per SMS Messaging sendet, an eine zentrale E-Mail-Adresse. Verwenden Sie diese Lösung, um SMS Nachrichten anzupassen und in der Vorschau anzuzeigen und um die Benutzerpool-Ereignisse zu testen, die Amazon Cognito veranlassen, eine SMS Nachricht zu senden. Nachdem Sie Ihre Tests abgeschlossen haben, setzen Sie den CloudFormation Stack zurück oder entfernen Sie die benutzerdefinierte SMS Absenderfunktionszuweisung aus Ihrem Benutzerpool.
Wichtig
Verwenden Sie die Vorlagen in amazon-cognito-user-pool- development-and-testing-with -
Lambda-Triggerquellen für benutzerdefinierte SMS Absender
Die folgende Tabelle zeigt das auslösende Ereignis für benutzerdefinierte SMS Triggerquellen in Ihrem Lambda-Code.
TriggerSource value |
Ereignis |
---|---|
CustomSMSSender_SignUp |
Ein Benutzer meldet sich an und Amazon Cognito sendet eine Willkommensnachricht. |
CustomSMSSender_ForgotPassword |
Ein Benutzer fordert einen Code an, um sein Passwort zurückzusetzen. |
CustomSMSSender_ResendCode |
Ein Benutzer fordert einen neuen Code an, um seine Registrierung zu bestätigen. |
CustomSMSSender_VerifyUserAttribute |
Ein Benutzer erstellt eine neue E-Mail-Adresse oder ein Telefonnummernattribut und Amazon Cognito sendet einen Code zur Verifizierung des Attributs. |
CustomSMSSender_UpdateUserAttribute |
Ein Benutzer aktualisiert eine E-Mail-Adresse oder ein Telefonnummernattribut und Amazon Cognito sendet einen Code zur Verifizierung des Attributs. |
CustomSMSSender_Authentication |
Ein mit SMS Multi-Faktor-Authentifizierung (MFA) konfigurierter Benutzer meldet sich an. |
CustomSMSSender_AdminCreateUser |
Sie erstellen einen neuen Benutzer in Ihrem Benutzerpool und Amazon Cognito sendet ihm ein temporäres Passwort. |