Déclencheur Lambda expéditeur d'e-mail personnalisé - Amazon Cognito

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Déclencheur Lambda expéditeur d'e-mail personnalisé

Lorsque vous attribuez un déclencheur d'expéditeur d'e-mails personnalisé à votre groupe d'utilisateurs, Amazon Cognito invoque une fonction Lambda à la place de son comportement par défaut lorsqu'un événement utilisateur nécessite l'envoi d'un e-mail. Grâce à un déclencheur d'expéditeur personnalisé, votre AWS Lambda fonction peut envoyer des notifications par e-mail à vos utilisateurs par le biais d'une méthode et d'un fournisseur de votre choix. Le code personnalisé de votre fonction doit traiter et livrer tous les e-mails de votre groupe d'utilisateurs.

Ce déclencheur répond aux scénarios dans lesquels vous souhaiterez peut-être avoir un meilleur contrôle sur la manière dont votre groupe d'utilisateurs envoie des e-mails. Votre fonction Lambda peut personnaliser l'appel aux opérations d'API Amazon SES, par exemple lorsque vous souhaitez gérer plusieurs identités vérifiées ou croisées. Régions AWS Votre fonction peut également rediriger les messages vers un autre support de diffusion ou un service tiers.

Pour savoir comment configurer un déclencheur d'expéditeur d'e-mail personnalisé, consultezActivation des déclencheurs Lambda personnalisés pour les expéditeurs.

Sources du déclencheur Lambda expéditeur d'e-mail personnalisé

Le tableau suivant montre les événements de déclenchement pour les sources du déclencheur d'e-mail personnalisé dans votre code Lambda.

TriggerSource value Événement
CustomEmailSender_SignUp Un utilisateur s'inscrit et Amazon Cognito envoie un message de bienvenue.
CustomEmailSender_Authentication Un utilisateur se connecte et Amazon Cognito envoie un code d'authentification multifactorielle (MFA).
CustomEmailSender_ForgotPassword Un utilisateur demande un code pour réinitialiser son mot de passe.
CustomEmailSender_ResendCode Un utilisateur demande un code de confirmation de compte de remplacement.
CustomEmailSender_UpdateUserAttribute Un utilisateur met à jour un attribut d'adresse e-mail ou de numéro de téléphone et Amazon Cognito envoie un code pour vérifier cet attribut.
CustomEmailSender_VerifyUserAttribute Un utilisateur crée un nouvel attribut d'adresse e-mail ou de numéro de téléphone et Amazon Cognito envoie un code pour vérifier cet attribut.
CustomEmailSender_AdminCreateUser Vous créez un nouvel utilisateur dans votre groupe d'utilisateurs et Amazon Cognito lui envoie un mot de passe temporaire.
CustomEmailSender_AccountTakeOverNotification Amazon Cognito détecte une tentative de prise de contrôle d'un compte d'utilisateur et envoie une notification à l'utilisateur.

Paramètres de déclencheur Lambda d'expéditeur d'e-mail personnalisé

La demande qu’Amazon Cognito transmet à cette fonction Lambda est une combinaison des paramètres ci-dessous et des paramètres courants qu’Amazon Cognito ajoute à toutes les demandes.

JSON
{ "request": { "type": "customEmailSenderRequestV1", "code": "string", "clientMetadata": { "string": "string", . . . }, "userAttributes": { "string": "string", . . . } }

Paramètres de demande d'expéditeur d'e-mail personnalisé

type

Version de la demande. Pour un événement d'expéditeur d'e-mail personnalisé, la valeur de cette chaîne est toujours customEmailSenderRequestV1.

code

Code chiffré que votre fonction peut déchiffrer et envoyer à votre utilisateur.

clientMetadata

Une ou plusieurs paires clé-valeur que vous pouvez fournir en tant qu'entrée personnalisée au déclencheur de la fonction Lambda d'expéditeur d'e-mail personnalisé. Pour transmettre ces données à votre fonction Lambda, vous pouvez utiliser le ClientMetadata paramètre dans les actions AdminRespondToAuthChallengeet RespondToAuthChallengeAPI. Amazon Cognito n'inclut pas les données issues du ClientMetadata paramètre AdminInitiateAuthet des opérations d'InitiateAuthAPI dans la demande transmise à la fonction de post-authentification.

Note

Amazon Cognito envoie des fonctions ClientMetadata de déclenchement d'e-mail personnalisées lors d'événements impliquant les sources de déclenchement suivantes :

  • CustomEmailSender_ForgotPassword

  • CustomEmailSender_SignUp

  • CustomEmailSender_Authentication

Amazon Cognito n'envoie ClientMetadata pas d'événements déclencheurs avec leur source. CustomEmailSender_AccountTakeOverNotification

userAttributes

Une ou plusieurs paires clé-valeur qui représentent les attributs utilisateur.

Paramètres de réponse d'expéditeur d'e-mail personnalisé

Amazon Cognito n'attend aucune information en retour supplémentaire dans la réponse d'expéditeur d'e-mail personnalisé. Votre fonction Lambda doit interpréter l'événement et déchiffrer le code, puis transmettre le contenu du message. Une fonction classique assemble un message électronique et le dirige vers un relais SMTP tiers.

Exemple de code

L'exemple Node.js suivant traite un événement d'e-mail dans votre fonction Lambda d'expéditeur d'e-mail personnalisé. Cet exemple suppose que votre fonction possède deux variables d'environnement définies.

KEY_ID

L'ID de la clé KMS que vous souhaitez utiliser pour chiffrer et déchiffrer les codes de vos utilisateurs.

KEY_ARN

L'Amazon Resource Name (ARN) de la clé KMS que vous souhaitez utiliser pour chiffrer et déchiffrer les codes de vos utilisateurs.

Pour déployer cette fonction
  1. Installez la dernière version de NodeJS dans votre espace de travail de développeur.

  2. Créez un nouveau projet NodeJS dans votre espace de travail.

  3. Initialisez votre projet avecnpm init -y.

  4. Créez le script pour la fonction Lambda :. touch index.mjs

  5. Collez le contenu de l'exemple ci-dessous dansindex.mjs.

  6. Téléchargez la dépendance du projet, AWS Encryption SDK :npm install @aws-crypto/client-node.

  7. Compressez le répertoire du projet dans un fichier :zip -r my_deployment_package.zip ..

  8. Déployez le fichier ZIP dans votre fonction.

Cet exemple de fonction déchiffre le code et, pour les événements d'inscription, simule l'envoi d'un message électronique à l'adresse e-mail de l'utilisateur.

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 email. // This example logs message details to CloudWatch Logs from your Lambda function. // Update this function with custom logic that sends an email message to 'emailaddress' with body 'message'. const sendEmail = async (emailAddress, message) => { // Log the destination with the email address masked. console.log(`Simulating email send to ${emailAddress.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('Email 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 == 'CustomEmailSender_SignUp') { const emailAddress = event.request.userAttributes.email; const message = `Welcome! Your verification code is: ${plainTextCode}`; await sendEmail(emailAddress, message); } else if (event.triggerSource == 'CustomEmailSender_ResendCode') { // Handle resend code } else if (event.triggerSource == 'CustomEmailSender_ForgotPassword') { // Handle forgot password } else if (event.triggerSource == 'CustomEmailSender_UpdateUserAttribute') { // Handle update attribute } else if (event.triggerSource == 'CustomEmailSender_VerifyUserAttribute') { // Handle verify attribute } else if (event.triggerSource == 'CustomEmailSender_AdminCreateUser') { // Handle admin create user } else if (event.triggerSource == 'CustomEmailSender_Authentication') { // Handle authentication } else if (event.triggerSource == 'CustomEmailSender_AccountTakeOverNotification') { // Handle account takeover notification } return; } catch (error) { console.error('Error in custom email sender:', error); throw error; } };