Benutzerdefinierter Lambda-Auslöser für SMS-Sender - 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.

Benutzerdefinierter Lambda-Auslöser für SMS-Sender

Wenn Sie Ihrem Benutzerpool einen benutzerdefinierten SMS-Absender-Trigger zuweisen, ruft Amazon Cognito statt des Standardverhaltens eine Lambda-Funktion auf, wenn ein Benutzerereignis das Senden einer SMS-Nachricht erfordert. 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 versenden.

Dieser Auslöser 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 Amazon SNS SNS-API-Vorgängen anpassen, z. B. wenn Sie mehrere Originationen oder Kreuzungen verwalten möchten. IDs AWS-Regionen Ihre Funktion kann auch Nachrichten an ein anderes Übermittlungsmedium oder einen Drittanbieter-Service weiterleiten.

Informationen zur Konfiguration eines benutzerdefinierten E-Mail-Absender-Triggers finden Sie unterLambda-Trigger mit benutzerdefiniertem Absender aktivieren.

Benutzerdefinierte SMS-Sender-Lambda-Auslöser-Quellen

Die folgende Tabelle zeigt das auslösende Ereignis für benutzerdefinierte SMS-Auslöserquellen 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 Benutzer, der mit SMS MFA (Multifaktor-Authentifizierung) konfiguriert ist, meldet sich an.
CustomSMSSender_AdminCreateUser Sie erstellen einen neuen Benutzer in Ihrem Benutzerpool und Amazon Cognito sendet ihm ein temporäres Passwort.

Benutzerdefinierte Lambda-Auslöserparameter für SMS-Sender

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": { "type": "customSMSSenderRequestV1", "code": "string", "clientMetadata": { "string": "string", . . . }, "userAttributes": { "string": "string", . . . } }

Benutzerdefinierte SMS-Sender-Anforderungsparameter

Typ

Die Anforderungsversion. Für ein benutzerdefiniertes SMS-Sender-Ereignis ist der Wert dieses Strings 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 benutzerdefinierten SMS-Sender-Auslöser der Lambda-Funktion bereitstellen können. Um diese Daten an Ihre Lambda-Funktion zu übergeben, können Sie den ClientMetadata Parameter in den Aktionen AdminRespondToAuthChallengeund RespondToAuthChallengeAPI verwenden. Amazon Cognito bezieht keine Daten aus dem ClientMetadata Parameter in AdminInitiateAuthund InitiateAuthAPI-Operationen in die Anfrage ein, die es an die Post-Authentifizierungsfunktion weiterleitet.

userAttributes

Ein oder mehrere Schlüssel-Wert-Paare, die Benutzerattribute darstellen.

Benutzerdefinierte SMS-Sender-Antwortparameter

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.

Codebeispiel

Das folgende Beispiel für Node.js verarbeitet ein SMS-Nachrichtenereignis in Ihrer benutzerdefinierten Lambda-Funktion für SMS-Sender. In diesem Beispiel wird davon ausgegangen, dass Ihre Funktion zwei Umgebungsvariablen definiert hat.

KEY_ID

Die ID 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 von Benutzercodes verwenden möchten.

Um diese Funktion bereitzustellen
  1. Installieren Sie die neueste Version von NodeJS in Ihrem Developer Workspace.

  2. Erstellen Sie ein neues NodeJS-Projekt in Ihrem Workspace.

  3. Initialisieren Sie Ihr Projekt mit. npm init -y

  4. Erstellen Sie das Skript für die Lambda-Funktion:touch index.mjs.

  5. Fügen Sie den Inhalt des folgenden Beispiels in einindex.mjs.

  6. Laden Sie die Projektabhängigkeit herunter, AWS Encryption SDK:npm install @aws-crypto/client-node.

  7. Komprimieren Sie das Projektverzeichnis in eine Datei:zip -r my_deployment_package.zip ..

  8. Stellen Sie die ZIP-Datei für Ihre Funktion bereit.

import { KmsKeyringNode, buildClient, CommitmentPolicy } from '@aws-crypto/client-node'; // Configure the encryption SDK client with the KMS key from the environment variables const { encrypt, decrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT ); const generatorKeyId = process.env.KEY_ID; const keyIds = [process.env.KEY_ARN]; const keyring = new KmsKeyringNode({ generatorKeyId, keyIds }); // Example function to simulate sending SMS. // This example logs message details to CloudWatch Logs from your Lambda function. // Update this function with custom logic that sends an SMS message to 'phoneNumber' with body 'message'. const sendSMS = async (phoneNumber, message) => { // Log the destination with the phone number masked. console.log(`Simulating SMS send to ${phoneNumber.replace(/[^+]/g, '*')}`); // Log the message with the code masked. console.log(`Message content: ${message.replace(/\b\d{6,8}\b/g, '********')}`); // Simulate API delay await new Promise(resolve => setTimeout(resolve, 100)); console.log('SMS sent successfully'); return true; }; export const handler = async (event) => { try { // Decrypt the secret code using encryption SDK let plainTextCode; if (event.request.code) { const { plaintext, messageHeader } = await decrypt(keyring, Buffer.from(event.request.code, 'base64')); plainTextCode = Buffer.from(plaintext).toString('utf-8'); } // Handle different trigger sources if (event.triggerSource == 'CustomSMSSender_SignUp') { const phoneNumber = event.request.userAttributes.phone_number; const message = `Welcome! Your verification code is: ${plainTextCode}`; await sendSMS(phoneNumber, message); } else if (event.triggerSource == 'CustomSMSSender_ResendCode') { // Handle resend code } else if (event.triggerSource == 'CustomSMSSender_ForgotPassword') { // Handle forgot password } else if (event.triggerSource == 'CustomSMSSender_UpdateUserAttribute') { // Handle update attribute } else if (event.triggerSource == 'CustomSMSSender_VerifyUserAttribute') { // Handle verify attribute } else if (event.triggerSource == 'CustomSMSSender_AdminCreateUser') { // Handle admin create user } return; } catch (error) { console.error('Error in custom SMS sender:', error); throw error; } };

Bewerten von SMS-Nachrichtenfunktionen mit einer benutzerdefinierten SMS-Sender-Funktion

Eine benutzerdefinierte Lambda-Funktion für SMS-Sender akzeptiert die SMS-Nachrichten, die Ihr Benutzerpool senden würde, und die Funktion stellt den Inhalt basierend auf Ihrer benutzerdefinierten Logik bereit. Amazon Cognito sendet die Benutzerdefinierte Lambda-Auslöserparameter für SMS-Sender 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 (Amazon SNS)-Thema senden. Ein Abonnent eines Amazon-SNS-Themas 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 Lambda-Funktion für SMS-Absender finden Sie unter amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email in der aws-samples-Bibliothek unter. GitHub Das Repository enthält AWS CloudFormation Vorlagen, mit denen Sie einen neuen Benutzerpool erstellen oder mit einem Benutzerpool arbeiten können, den Sie bereits haben. Diese Vorlagen erstellen Lambda-Funktionen und ein Amazon-SNS-Thema. Die Lambda-Funktion, die die Vorlage als benutzerdefinierten SMS-Sender-Auslöser zuweist, leitet Ihre SMS-Nachrichten an die Abonnenten des Amazon-SNS-Themas um.

Wenn Sie diese Lösung in einem Benutzerpool bereitstellen, werden alle Nachrichten, die Amazon Cognito normalerweise mit SNS-Messaging sendet, mit der Lambda-Funktion stattdessen an eine zentrale E-Mail-Adresse gesendet. Verwenden Sie diese Lösung, um SMS-Nachrichten anzupassen und in der Vorschau anzuzeigen und um die Benutzerpool-Ereignisse zu testen, die dazu führen, dass Amazon Cognito eine SMS-Nachricht sendet. Nachdem Sie Ihre Tests abgeschlossen haben, setzen Sie den CloudFormation Stack zurück oder entfernen Sie die Zuweisung der benutzerdefinierten SMS-Absenderfunktion aus Ihrem Benutzerpool.

Wichtig

Verwenden Sie die Vorlagen in amazon-cognito-user-pool- development-and-testing-with - nichtsms-redirected-to-email, um eine Produktionsumgebung aufzubauen. Die benutzerdefinierte Lambda-Funktion für SMS-Sender in der Lösung simuliert SMS-Nachrichten, die Lambda-Funktion sendet sie jedoch alle an eine einzige zentrale E-Mail-Adresse. Bevor Sie SMS-Nachrichten in einem Amazon-Cognito-Benutzerpool in der Produktion senden können, müssen Sie die unter Einstellungen für SMS-Nachrichten für Amazon-Cognito-Benutzerpools angegebenen Anforderungen erfüllen.