Trigger Lambda del mittente di e-mail personalizzato - Amazon Cognito

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Trigger Lambda del mittente di e-mail personalizzato

Quando assegni un trigger del mittente dell'e-mail personalizzato al pool di utenti, Amazon Cognito richiama una funzione Lambda anziché il suo comportamento predefinito quando un evento utente richiede l'invio di un messaggio e-mail. Con un trigger mittente personalizzato, la tua AWS Lambda funzione può inviare notifiche e-mail agli utenti tramite un metodo e un provider di tua scelta. Il codice personalizzato della funzione deve elaborare e distribuire tutti i messaggi e-mail del pool di utenti.

Questo trigger è utile per scenari in cui potresti voler avere un maggiore controllo sul modo in cui il tuo pool di utenti invia i messaggi e-mail. La tua funzione Lambda può personalizzare la chiamata alle operazioni dell'API di Amazon SES, ad esempio quando desideri gestire più identità verificate o incrociate. Regioni AWS La tua funzione potrebbe anche reindirizzare i messaggi verso un altro mezzo di consegna o un servizio di terze parti.

Per informazioni su come configurare un trigger personalizzato per il mittente dell'e-mail, consulta. Attivazione dei trigger Lambda personalizzati del mittente

Origini dei trigger Lambda del mittente di e-mail personalizzato

La tabella che segue mostra gli eventi di attivazione per le origini dei trigger delle e-mail personalizzate nel codice Lambda.

TriggerSource value Evento
CustomEmailSender_SignUp Un utente si registra e Amazon Cognito invia un messaggio di benvenuto.
CustomEmailSender_Authentication Un utente accede e Amazon Cognito invia un codice di autenticazione a più fattori (MFA).
CustomEmailSender_ForgotPassword Un utente richiede un codice per reimpostare la password.
CustomEmailSender_ResendCode Un utente richiede un codice di conferma dell'account sostitutivo.
CustomEmailSender_UpdateUserAttribute Un utente aggiorna un indirizzo e-mail o un numero di telefono e Amazon Cognito gli invia un codice per verificare l'attributo.
CustomEmailSender_VerifyUserAttribute Un utente crea un nuovo attributo indirizzo e-mail o numero di telefono e Amazon Cognito gli invia un codice per verificare l'attributo.
CustomEmailSender_AdminCreateUser Crei un nuovo utente nel tuo bacino d'utenza e Amazon Cognito gli invia una password temporanea.
CustomEmailSender_AccountTakeOverNotification Amazon Cognito rileva il tentativo di prendere il controllo di un account utente e invia una notifica all'utente.

Parametri del trigger Lambda del mittente di e-mail personalizzato

La richiesta passata da Amazon Cognito a questa funzione Lambda è una combinazione dei parametri seguenti e dei parametri comuni aggiunti da Amazon Cognito a tutte le richieste.

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

Parametri della richiesta del mittente di e-mail personalizzato

tipo

La versione della richiesta. Per un evento del mittente di e-mail personalizzato, il valore di questa stringa è sempre customEmailSenderRequestV1.

code

Il codice crittografato che la funzione può decrittografare e inviare all'utente.

clientMetadata

Una o più coppie chiave-valore che puoi fornire come input personalizzato al trigger della funzione Lambda del mittente di e-mail personalizzato. Per passare questi dati alla funzione Lambda, puoi utilizzare il ClientMetadata parametro nelle azioni AdminRespondToAuthChallengee RespondToAuthChallengeAPI. Amazon Cognito non include i dati del ClientMetadata parametro AdminInitiateAuthe le operazioni InitiateAuthAPI nella richiesta che passa alla funzione di post-autenticazione.

Nota

Amazon Cognito invia ClientMetadata a e-mail personalizzate funzioni di attivazione in caso di eventi con le seguenti fonti di attivazione:

  • CustomEmailSender_ForgotPassword

  • CustomEmailSender_SignUp

  • CustomEmailSender_Authentication

Amazon Cognito non invia ClientMetadata eventi trigger con l'origine. CustomEmailSender_AccountTakeOverNotification

userAttributes

Una o più coppie chiave-valore che rappresentano gli attributi utente.

Parametri di risposta del mittente di e-mail personalizzato

Amazon Cognito non prevede di restituire ulteriori informazioni nella risposta del mittente di e-mail personalizzato. La funzione Lambda deve interpretare l'evento e decrittografare il codice, quindi recapitare il contenuto del messaggio. Una funzione tipica assembla un messaggio e-mail e lo indirizza a un relay SMTP di terze parti.

esempio di codice

Nel seguente esempio Node.js viene illustrato come elaborare un evento di messaggio e-mail nella funzione Lambda del mittente di e-mail personalizzata. Per questo esempio si presuppone che la funzione abbia due variabili d'ambiente definite.

KEY_ID

L'ID della chiave KMS che desideri utilizzare per crittografare e decrittografare i codici degli utenti.

KEY_ARN

Il nome della risorsa Amazon (ARN) della chiave KMS che desideri utilizzare per crittografare e decrittografare i codici degli utenti.

Per implementare questa funzione
  1. Installa l'ultima versione di NodeJS nel tuo spazio di lavoro per sviluppatori.

  2. Crea un nuovo progetto NodeJS nel tuo spazio di lavoro.

  3. Inizializza il tuo progetto con. npm init -y

  4. Crea lo script per la funzione Lambda:. touch index.mjs

  5. Incolla il contenuto dell'esempio seguente inindex.mjs.

  6. Scarica la dipendenza del progetto, AWS Encryption SDK:npm install @aws-crypto/client-node.

  7. Comprimi la cartella del progetto in un file:zip -r my_deployment_package.zip ..

  8. Implementa il file ZIP nella tua funzione.

Questa funzione di esempio decrittografa il codice e, per gli eventi di iscrizione, simula l'invio di un messaggio e-mail all'indirizzo e-mail dell'utente.

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; } };