Acionador do Lambda de remetente de e-mail personalizado - Amazon Cognito

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Acionador do Lambda de remetente de e-mail personalizado

Quando você atribui um acionador de remetente de e-mail personalizado ao grupo de usuários, o Amazon Cognito invoca uma função do Lambda em vez do comportamento padrão quando um evento do usuário exige que ele envie uma mensagem de e-mail. Com um gatilho de remetente personalizado, sua AWS Lambda função pode enviar notificações por e-mail para seus usuários por meio de um método e provedor de sua escolha. O código personalizado da função deve processar e entregar todas as mensagens de e-mail do grupo de usuários.

Esse acionador serve para cenários em que talvez você queira ter mais controle sobre como seu grupo de usuários envia mensagens de e-mail. Sua função do Lambda pode personalizar a chamada para as operações da API do Amazon SES, por exemplo, quando você deseja gerenciar várias identidades verificadas ou Regiões da AWS cruzadas. Sua função também pode redirecionar mensagens para outro meio de entrega ou serviço de terceiros.

Para saber como configurar um gatilho de remetente de e-mail personalizado, consulteAtivando gatilhos Lambda personalizados do remetente.

Fontes do acionador do Lambda de remetente de e-mail personalizado

A tabela a seguir mostra o evento de acionamento de fontes de acionadores de e-mail personalizado no código do Lambda.

TriggerSource value Event
CustomEmailSender_SignUp Um usuário se cadastra e o Amazon Cognito envia uma mensagem de boas-vindas.
CustomEmailSender_Authentication Um usuário faz login e o Amazon Cognito envia um código de autenticação multifator (MFA).
CustomEmailSender_ForgotPassword Um usuário solicita um código para redefinir a senha.
CustomEmailSender_ResendCode Um usuário solicita um código de confirmação da conta de substituição.
CustomEmailSender_UpdateUserAttribute Um usuário atualiza um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo.
CustomEmailSender_VerifyUserAttribute Um usuário cria um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo.
CustomEmailSender_AdminCreateUser Você cria um usuário em seu grupo de usuários e o Amazon Cognito envia uma senha temporária.
CustomEmailSender_AccountTakeOverNotification O Amazon Cognito detecta uma tentativa de tomada de controle de uma conta de usuário e envia uma notificação ao usuário.

Parâmetros do acionador do Lambda de remetente personalizado de e-mail

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos parâmetros comuns que o Amazon Cognito adiciona a todas as solicitações.

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

Parâmetros de solicitação do remetente personalizado de e-mail

type

A versão da solicitação. Para um evento de remetente personalizado de e-mail, o valor dessa string é sempre customEmailSenderRequestV1.

código

O código criptografado que sua função pode descriptografar e enviar ao usuário.

clientMetadata

Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada à função do Lambda para o acionador de migração do usuário. Para passar esses dados para sua função Lambda, você pode usar o ClientMetadata parâmetro nas ações AdminRespondToAuthChallengee da RespondToAuthChallengeAPI. O Amazon Cognito não inclui dados do ClientMetadata parâmetro AdminInitiateAuthe operações de InitiateAuthAPI na solicitação que ele passa para a função de pós-autenticação.

nota

O Amazon Cognito envia ClientMetadata para funções personalizadas de acionador de e-mail personalizado em eventos com as seguintes fontes de acionador:

  • CustomEmailSender_ForgotPassword

  • CustomEmailSender_SignUp

  • CustomEmailSender_Authentication

O Amazon Cognito não envia ClientMetadata em eventos de acionador com CustomEmailSender_AccountTakeOverNotification de origem.

userAttributes

Um ou mais pares de chave-valor que representam atributos de usuário.

Parâmetros de resposta do remetente personalizado de e-mail

O Amazon Cognito não espera nenhuma outra informação de retorno na resposta do remetente personalizado de e-mail. Sua função do Lambda deve interpretar o evento, descriptografar o código e, em seguida, entregar o conteúdo da mensagem. Uma função típica reúne uma mensagem de e-mail e a direciona para um retransmissor SMTP de terceiros.

Exemplo de código

O exemplo de Node.js a seguir processa um evento de mensagem de e-mail na função do Lambda de remetente personalizado de e-mail. Esse exemplo pressupõe que a função tenha duas variáveis de ambiente definidas.

KEY_ID

O ID da chave KMS que você deseja usar para criptografar e descriptografar os códigos dos seus usuários.

KEY_ARN

O nome do recurso da Amazon (ARN) da chave do KMS que você deseja usar para criptografar e descriptografar os códigos dos usuários.

Para implantar essa função
  1. Instale a versão mais recente do NodeJS em seu espaço de trabalho de desenvolvedor.

  2. Crie um novo projeto NodeJS em seu espaço de trabalho.

  3. Inicialize seu projeto comnpm init -y.

  4. Crie o script para a função Lambda:. touch index.mjs

  5. Cole o conteúdo do exemplo abaixo emindex.mjs.

  6. Baixe a dependência do projeto, AWS Encryption SDK:npm install @aws-crypto/client-node.

  7. Compacte o diretório do projeto em um arquivo:zip -r my_deployment_package.zip ..

  8. Implante o arquivo ZIP na sua função.

Essa função de exemplo decifra o código e, para eventos de inscrição, simula o envio de uma mensagem de e-mail para o endereço de e-mail do usuário.

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