Trigger Lambda personalizzato SMS del mittente - 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 personalizzato SMS del mittente

Quando assegni un trigger SMS mittente personalizzato al tuo pool di utenti, Amazon Cognito richiama una funzione Lambda anziché il suo comportamento predefinito quando un evento utente richiede l'invio di un messaggio. SMS Con un trigger mittente personalizzato, la tua AWS Lambda funzione può inviare SMS notifiche ai tuoi utenti tramite un metodo e un provider di tua scelta. Il codice personalizzato della tua funzione deve elaborare e recapitare tutti i SMS messaggi dal tuo 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 SMS i messaggi. La tua funzione Lambda può personalizzare la chiamata SNS API alle operazioni Amazon, ad esempio quando desideri gestire più origini o IDs incroci. Regioni AWS La tua funzione potrebbe anche reindirizzare i messaggi verso un altro mezzo di consegna o un servizio di terze parti.

Nota

Al momento, non è possibile assegnare trigger del mittente personalizzati nella console Amazon Cognito. È possibile assegnare un trigger con il LambdaConfig parametro in una richiesta CreateUserPool or UpdateUserPoolAPI.

Per usare questo trigger, esegui questi passaggi:

  1. Crea una chiave di crittografia simmetrica in AWS Key Management Service ().AWS KMS Amazon Cognito genera segreti (password temporanee, codici di verifica e codici di conferma), quindi utilizza questa chiave per crittografare i segreti. KMS È quindi possibile utilizzare l'APIoperazione Decrypt nella funzione Lambda per decrittografare i segreti e inviarli all'utente in formato testo non crittografato. AWS Encryption SDKÈ uno strumento utile per le operazioni relative alla funzione. AWS KMS

  2. Crea una funzione Lambda che desideri assegnare come trigger del mittente personalizzato. Concedi kms:Decrypt le autorizzazioni per la tua KMS chiave per il ruolo della funzione Lambda.

  3. Concedi l'accesso cognito-idp.amazonaws.com al principale del servizio Amazon Cognito per richiamare la funzione Lambda.

  4. Scrivi il codice della funzione Lambda che indirizza i messaggi ai metodi di distribuzione personalizzati o a fornitori di terze parti. Per distribuire il codice di verifica o conferma dell'utente, Base64 decodifica e decrittografa il valore del parametro code nella richiesta. Questa operazione produce un codice o una password in testo normale da includere nel messaggio.

  5. Aggiorna il bacino d'utenza in modo che utilizzi un trigger Lambda del mittente personalizzato. Il IAM responsabile che aggiorna o crea un pool di utenti con un trigger mittente personalizzato deve avere l'autorizzazione a creare una concessione per la tua chiave. KMS Il seguente LambdaConfig frammento assegna funzioni personalizzate SMS e relative al mittente dell'e-mail.

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

Parametri di attivazione Lambda del SMS mittente personalizzati

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

Parametri personalizzati della richiesta SMS del mittente

tipo

La versione della richiesta. Per un evento SMS mittente personalizzato, il valore di questa stringa è sempre. customSMSSenderRequestV1

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 SMS mittente personalizzato. Per passare questi dati alla funzione Lambda, puoi utilizzare il ClientMetadata parametro nelle azioni AdminRespondToAuthChallengeand RespondToAuthChallengeAPI. Amazon Cognito non include i dati del ClientMetadata parametro AdminInitiateAuthe InitiateAuthAPIle operazioni nella richiesta che passa alla funzione di post-autenticazione.

userAttributes

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

Parametri di SMS risposta personalizzati del mittente

Amazon Cognito non prevede di restituire ulteriori informazioni nella risposta. La funzione può utilizzare API operazioni per interrogare e modificare le risorse o registrare i metadati degli eventi su un sistema esterno.

Attivazione del trigger SMS Lambda personalizzato del mittente

Puoi impostare un trigger SMS mittente personalizzato che utilizza una logica personalizzata per inviare SMS messaggi per il tuo pool di utenti. La procedura seguente assegna un SMS trigger personalizzato, un trigger e-mail personalizzato o entrambi al pool di utenti. Dopo aver aggiunto il trigger SMS mittente personalizzato, Amazon Cognito invia sempre gli attributi utente, incluso il numero di telefono, e il codice monouso alla funzione Lambda anziché il comportamento predefinito che prevede l'invio di un SMS messaggio con Amazon Simple Notification Service.

Importante

Amazon Cognito: HTML evita i caratteri riservati come < (&lt;) e > (&gt;) nella password temporanea dell'utente. Questi caratteri potrebbero essere visualizzati nelle password temporanee inviate da Amazon Cognito alla funzione del mittente e-mail personalizzata, ma non vengono visualizzati nei codici di verifica temporanei. Per inviare password temporanee, la funzione Lambda deve eliminare questi caratteri dopo aver decrittografato la password e prima di inviare il messaggio all'utente.

  1. Creare una chiave di crittografia in AWS KMS. Questa chiave cripta le password temporanee e i codici di autorizzazione generati da Amazon Cognito. Puoi quindi decrittografare questi segreti nella funzione Lambda del mittente personalizzato e inviarli all'utente come testo non crittografato.

  2. Concedi al servizio Amazon Cognito cognito-idp.amazonaws.com l'accesso principale per crittografare i codici con la chiave. KMS

    Applica la seguente politica basata sulle risorse alla tua chiave. 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" } } }] }
  3. Crea una funzione Lambda per il trigger del mittente personalizzato. Amazon Cognito utilizza la AWS crittografia SDK per crittografare i segreti, le password temporanee e i codici che autorizzano le richieste degli utenti. API

    1. Assegna un IAM ruolo alla tua funzione Lambda che disponga almeno delle autorizzazioni per kms:Decrypt la tua chiave. KMS

  4. Concedi l'accesso cognito-idp.amazonaws.com al principale del servizio Amazon Cognito per richiamare la funzione Lambda.

    Il AWS CLI comando seguente concede ad Amazon Cognito l'autorizzazione a richiamare la funzione Lambda:

    aws lambda add-permission --function-name lambda_arn --statement-id "CognitoLambdaInvokeAccess" --action lambda:InvokeFunction --principal cognito-idp.amazonaws.com
  5. Componi il codice della funzione Lambda per inviare i tuoi messaggi. Amazon Cognito utilizza AWS Encryption SDK la crittografia dei segreti prima che Amazon Cognito li invii alla funzione Lambda personalizzata del mittente. Nella tua funzione, esegui la decrittografia del segreto ed elabora tutti i metadati pertinenti. Quindi invia il codice, il tuo messaggio personalizzato e il numero di telefono di destinazione all'addetto che recapita il messaggio. API

  6. Aggiungi il AWS Encryption SDK alla tua funzione Lambda. Per ulteriori informazioni, consulta Linguaggi di SDKprogrammazione per AWS la crittografia. Per aggiornare il pacchetto Lambda, completa la procedura seguente.

    1. Esporta la funzione Lambda come file .zip in AWS Management Console.

    2. Apri la tua funzione e aggiungi il AWS Encryption SDK. Per ulteriori informazioni e i link di download, consulta la sezione relative ai linguaggi di programmazione di AWS Encryption SDK nella Guida per gli sviluppatori di AWS Encryption SDK .

    3. Comprimi la funzione con le tue SDK dipendenze e carica la funzione su Lambda. Per ulteriori informazioni, consulta Distribuzione di funzioni Lambda come archivi di file .zip nella Guida per gli sviluppatori di AWS Lambda .

  7. Aggiorna il pool di utenti per aggiungere trigger Lambda del mittente personalizzati. Includi un CustomEmailSender parametro CustomSMSSender or in una UpdateUserPool API richiesta. L'UpdateUserPoolAPIoperazione richiede tutti i parametri del pool di utenti e i parametri che si desidera modificare. Se non fornisci tutti i parametri rilevanti, Amazon Cognito imposta i valori di tutti i parametri mancanti sui valori predefiniti. Come illustrato nell'esempio che segue, includi le voci per tutte le funzioni Lambda che desideri aggiungere o mantenere nel tuo pool di utenti. Per ulteriori informazioni, consulta Aggiornamento della configurazione del pool di utenti e del client dell'app.

    #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"

Per rimuovere un trigger Lambda del mittente personalizzato con update-user-pool AWS CLI un, ometti CustomSMSSender il parametro CustomEmailSender o e --lambda-config includi tutti gli altri trigger che desideri utilizzare con il tuo pool di utenti.

Per rimuovere un trigger Lambda del mittente personalizzato con UpdateUserPool API una richiesta, ometti CustomSMSSender il parametro CustomEmailSender o dal corpo della richiesta che contiene il resto della configurazione del pool di utenti.

esempio di codice

Il seguente esempio di Node.js elabora un evento di SMS messaggio nella funzione Lambda SMS del mittente personalizzata. Per questo esempio si presuppone che la funzione abbia due variabili d'ambiente definite.

KEY_ALIAS

L'alias della KMS chiave da utilizzare per crittografare e decrittografare i codici degli utenti.

KEY_ARN

L'Amazon Resource Name (ARN) della KMS chiave che desideri utilizzare per crittografare e decrittografare i codici dei tuoi utenti.

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

Valuta le funzionalità dei SMS messaggi con una funzione mittente personalizzata SMS

Una funzione Lambda del SMS mittente personalizzata accetta SMS i messaggi inviati dal pool di utenti e fornisce il contenuto in base alla logica personalizzata. Amazon Cognito invia i Parametri di attivazione Lambda del SMS mittente personalizzati alla tua funzione. La funzione può fare ciò che vuoi con queste informazioni. Ad esempio, puoi inviare il codice a un argomento di Amazon Simple Notification Service (AmazonSNS). Un abbonato ad Amazon SNS Topic può essere un SMS messaggio, un HTTPS endpoint o un indirizzo e-mail.

Per creare un ambiente di test per la SMS messaggistica di Amazon Cognito con una funzione Lambda del SMS mittente personalizzata, amazon-cognito-user-poolconsulta development-and-testing-with - sms-redirected-to-email - nella libreria aws-samples su. GitHub Il repository contiene AWS CloudFormation modelli che possono creare un nuovo pool di utenti o utilizzare un pool di utenti che già possiedi. Questi modelli creano funzioni Lambda e un argomento AmazonSNS. La funzione Lambda che il modello assegna come trigger SMS mittente personalizzato reindirizza i SMS messaggi agli abbonati all'argomento Amazon. SNS

Quando distribuisci questa soluzione a un pool di utenti, tutti i messaggi che Amazon Cognito di solito invia SMS tramite messaggistica, la funzione Lambda invia invece a un indirizzo e-mail centrale. Utilizza questa soluzione per personalizzare e visualizzare in anteprima SMS i messaggi e per testare gli eventi del pool di utenti che causano l'invio di un SMS messaggio da parte di Amazon Cognito. Dopo aver completato i test, ripristina lo CloudFormation stack o rimuovi l'assegnazione personalizzata della funzione SMS mittente dal tuo pool di utenti.

Importante

Non utilizzate i modelli in amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email per creare un ambiente di produzione. La funzione Lambda del SMS mittente personalizzato nella soluzione SMS simula i messaggi, ma la funzione Lambda li invia tutti a un unico indirizzo e-mail centrale. Prima di poter inviare SMS messaggi in un pool di utenti Amazon Cognito di produzione, devi completare i requisiti indicati in. SMSimpostazioni dei messaggi per i pool di utenti di Amazon Cognito

Sorgenti di attivazione Lambda personalizzate per SMS mittenti

La tabella seguente mostra l'evento di attivazione per le sorgenti di SMS trigger personalizzate nel codice Lambda.

TriggerSource value Evento
CustomSMSSender_SignUp Un utente si registra e Amazon Cognito invia un messaggio di benvenuto.
CustomSMSSender_ForgotPassword Un utente richiede un codice per reimpostare la password.
CustomSMSSender_ResendCode Un utente richiede un nuovo codice per confermare la registrazione.
CustomSMSSender_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.
CustomSMSSender_UpdateUserAttribute Un utente aggiorna un indirizzo e-mail o un numero di telefono e Amazon Cognito gli invia un codice per verificare l'attributo.
CustomSMSSender_Authentication Un utente configurato con l'SMSautenticazione a più fattori (MFA) accede.
CustomSMSSender_AdminCreateUser Crei un nuovo utente nel tuo bacino d'utenza e Amazon Cognito gli invia una password temporanea.