사용자 정의 메시지 Lambda 트리거 - Amazon Cognito

사용자 정의 메시지 Lambda 트리거

Amazon Cognito는 이메일이나 전화 확인 메시지 또는 멀티 팩터 인증(MFA) 코드를 보내기 전에 이 트리거를 호출합니다. 사용자 지정 메시지 트리거를 사용하여 메시지를 동적으로 사용자 지정할 수 있습니다. 원래 Amazon Cognito 콘솔의 메시지 사용자 지정(Message customizations) 탭에서 정적 사용자 지정 메시지를 편집할 수 있습니다.

요청에는 codeParameter가 포함됩니다. 이는 Amazon Cognito가 사용자에게 전달하는 코드의 자리 표시자 역할을 하는 문자열입니다. codeParameter 문자열을 확인 코드가 나타날 메시지 본문에 삽입합니다. Amazon Cognito에서 응답을 수신하면 Amazon Cognito에서 codeParameter 문자열을 실제 확인 코드로 바꿉니다.

참고

CustomMessage_AdminCreateUser 트리거 소스가 있는 사용자 지정 메시지 Lambda 함수는 사용자 이름 및 확인 코드를 반환합니다. 관리자가 생성한 사용자는 사용자 이름과 코드를 모두 수신해야 하므로 함수로부터의 응답에는 request.usernameParameterrequest.codeParameter가 둘 다 포함되어야 합니다.

사용자 정의 메시지 Lambda 트리거 소스

triggerSource 값 트리거하는 이벤트
CustomMessage_SignUp 사용자 지정 메시지 – 가입 후 확인 코드 전송.
CustomMessage_AdminCreateUser 사용자 지정 메시지 – 새 사용자에게 임시 암호 전송.
CustomMessage_ResendCode 사용자 지정 메시지 – 기존 사용자에게 확인 코드 재전송.
CustomMessage_ForgotPassword 사용자 지정 메시지 – 암호 분실 요청을 위한 확인 코드 전송.
CustomMessage_UpdateUserAttribute 사용자 지정 메시지 – 사용자의 이메일 또는 전화 번호가 변경되면 이 트리거가 사용자에게 자동으로 확인 코드를 전송합니다. 다른 속성에는 사용할 수 없습니다.
CustomMessage_VerifyUserAttribute 사용자 지정 메시지 – 사용자가 새 이메일 또는 전화 번호에 대해 수동으로 요청하면 이 트리거가 사용자에게 확인 코드를 전송합니다.
CustomMessage_Authentication 사용자 지정 메시지 – 인증하는 동안 MFA 코드 전송.

사용자 정의 메시지 Lambda 트리거 파라미터

이러한 파라미터는 Amazon Cognito가 공통 파라미터의 이벤트 정보와 함께 이 Lambda 함수에 전달하는 파라미터입니다.

JSON
{ "request": { "userAttributes": { "string": "string", . . . } "codeParameter": "####", "usernameParameter": "string", "clientMetadata": { "string": "string", . . . } }, "response": { "smsMessage": "string", "emailMessage": "string", "emailSubject": "string" } }

사용자 정의 메시지 요청 파라미터

userAttributes

사용자 속성을 나타내는 하나 이상의 이름-값 페어입니다.

codeParameter

사용자 지정 메시지에서 확인 코드의 자리 표시자로 사용할 문자열입니다.

usernameParameter

사용자 이름 Amazon Cognito는 관리자가 생성한 사용자의 요청에 이 파라미터를 포함합니다.

clientMetadata

사용자 지정 메시지 트리거에 지정하는 Lambda 함수에 사용자 지정 입력으로 제공할 수 있는 하나 이상의 키-값 쌍입니다. 사용자 지정 메시지 기능을 호출하는 요청에는 AdminInitiateAuthInitiateAuth API 작업의 ClientMetadata 파라미터에 전달된 데이터가 포함되지 않습니다. 이 데이터를 Lambda 함수에 전달하려면 다음 API 작업에 ClientMetadata 파라미터를 사용합니다.

사용자 정의 메시지 응답 파라미터

응답에서는 사용자에게 보낼 메시지에 사용할 사용자 지정 텍스트를 지정합니다.

smsMessage

사용자에게 보낼 사용자 지정 SMS 메시지입니다. 요청에서 수신한 codeParameter 값을 포함해야 합니다.

emailMessage

사용자에게 보낼 사용자 지정 이메일 메시지입니다. emailMessage 파라미터에서 HTML 서식을 사용할 수 있습니다. 요청에서 수신한 codeParameter 값을 변수 {####}으로 포함해야 합니다. Amazon Cognito는 사용자 풀의 EmailSendingAccount 속성이 DEVELOPER인 경우에만 emailMessage 파라미터를 사용할 수 있습니다. 사용자 풀의 EmailSendingAccount 속성이 DEVELOPER가 아니고 emailMessage 파라미터가 반환된 경우 Amazon Cognito에서 400오류 코드 com.amazonaws.cognito.identity.idp.model.InvalidLambdaResponseException을 생성합니다. Amazon Simple Email Service(Amazon SES)를 선택하여 이메일 메시지를 보내면 사용자 풀의 EmailSendingAccount 속성이 DEVELOPER입니다. 그렇지 않으면 이 값은 COGNITO_DEFAULT입니다.

emailSubject

사용자 지정 메시지의 제목 줄입니다. 사용자 풀의 EmailSendingAccount 속성이 DEVELOPER인 경우에만 emailSubject 파라라미터를 사용할 수 있습니다. 사용자 풀의 EmailSendingAccount 속성이 DEVELOPER가 아니고 Amazon Cognito에서 emailSubject 파라미터를 반환하는 경우 Amazon Cognito에서 400 오류 코드 com.amazonaws.cognito.identity.idp.model.InvalidLambdaResponseException을 생성합니다. Amazon Simple Email Service(Amazon SES)를 선택하여 이메일 메시지를 보내도록 선택하면 사용자 풀의 EmailSendingAccount 속성이 DEVELOPER입니다. 그렇지 않으면 이 값은 COGNITO_DEFAULT입니다.

가입용 사용자 지정 메시지의 예

이 Lambda 함수 예는 서비스에서 앱이 사용자에게 확인 코드를 보내야 할 때 이메일 또는 SMS 메시지를 사용자 지정합니다.

Amazon Cognito는 사후 등록, 확인 코드 재전송, 잊어버린 암호 복구 또는 사용자 속성 확인과 같은 여러 이벤트에서 Lambda 트리거를 호출할 수 있습니다. SMS와 이메일 모두의 메시지가 응답에 포함됩니다. 메시지에는 코드 파라미터 "####"이 포함되어야 합니다. 이 파라미터는 사용자가 수신하는 확인 코드의 자리 표시자입니다.

이메일 메시지의 최대 길이는 UTF-8 20,000자입니다. 이 길이에는 확인 코드가 포함됩니다. 이러한 이메일 메시지에 HTML 태그를 사용할 수 있습니다.

SMS 메시지의 최대 길이는 UTF-8 140자입니다. 이 길이에는 확인 코드가 포함됩니다.

Node.js
exports.handler = (event, context, callback) => { // if(event.userPoolId === "theSpecialUserPool") { // Identify why was this function invoked if(event.triggerSource === "CustomMessage_SignUp") { // Ensure that your message contains event.request.codeParameter. This is the placeholder for code that will be sent event.response.smsMessage = "Welcome to the service. Your confirmation code is " + event.request.codeParameter; event.response.emailSubject = "Welcome to the service"; event.response.emailMessage = "Thank you for signing up. " + event.request.codeParameter + " is your verification code"; } // Create custom message for other events } // Customize messages for other user pools // Return to Amazon Cognito callback(null, event); };

Amazon Cognito는 이벤트 정보를 Lambda 함수에 전달합니다. 그런 다음 함수는 응답이 변경되면 동일한 이벤트 객체를 Amazon Cognito에 반환합니다. Lambda 콘솔에서 해당 Lambda 트리거와 관련 있는 데이터로 테스트 이벤트를 설정할 수 있습니다. 다음은 이 코드 샘플의 테스트 이벤트입니다.

JSON
{ "version": 1, "triggerSource": "CustomMessage_SignUp/CustomMessage_ResendCode/CustomMessage_ForgotPassword/CustomMessage_VerifyUserAttribute", "region": "<region>", "userPoolId": "<userPoolId>", "userName": "<userName>", "callerContext": { "awsSdk": "<calling aws sdk with version>", "clientId": "<apps client id>", ... }, "request": { "userAttributes": { "phone_number_verified": false, "email_verified": true, ... }, "codeParameter": "####" }, "response": { "smsMessage": "<custom message to be sent in the message with code parameter>" "emailMessage": "<custom message to be sent in the message with code parameter>" "emailSubject": "<custom email subject>" } }

관리자로 사용자 생성용 사용자 정의 메시지 예제

CustomMessage_AdminCreateUser 트리거가 있는 사용자 지정 메시지 Lambda 함수는 사용자 이름 및 확인 코드를 반환합니다. 이러한 이유로 메시지 본문에 request.usernameParameterrequest.codeParameter를 모두 포함합니다.

코드 파라미터 값 ####은 임시 암호용 자리 표시자이며 'username'은 사용자가 수신하는 사용자 이름의 자리 표시자입니다.

이메일 메시지의 최대 길이는 UTF-8 20,000자입니다. 이 길이에는 확인 코드가 포함됩니다. 이러한 이메일에 HTML 태그를 사용할 수 있습니다. SMS 메시지의 최대 길이는 UTF-8 140자입니다. 이 길이에는 확인 코드가 포함됩니다.

SMS와 이메일 모두의 메시지가 응답에 포함됩니다.

Node.js
exports.handler = (event, context, callback) => { // if(event.userPoolId === "theSpecialUserPool") { // Identify why was this function invoked if(event.triggerSource === "CustomMessage_AdminCreateUser") { // Ensure that your message contains event.request.codeParameter event.request.usernameParameter. This is the placeholder for the code and username that will be sent to your user. event.response.smsMessage = "Welcome to the service. Your user name is " + event.request.usernameParameter + " Your temporary password is " + event.request.codeParameter; event.response.emailSubject = "Welcome to the service"; event.response.emailMessage = "Welcome to the service. Your user name is " + event.request.usernameParameter + " Your temporary password is " + event.request.codeParameter; } // Create custom message for other events } // Customize messages for other user pools // Return to Amazon Cognito callback(null, event); };

Amazon Cognito는 이벤트 정보를 Lambda 함수에 전달합니다. 그런 다음 함수는 응답이 변경되면 동일한 이벤트 객체를 Amazon Cognito에 반환합니다. Lambda 콘솔에서 해당 Lambda 트리거와 관련 있는 데이터로 테스트 이벤트를 설정할 수 있습니다. 다음은 이 코드 샘플의 테스트 이벤트입니다.

JSON
{ "version": 1, "triggerSource": "CustomMessage_AdminCreateUser", "region": "<region>", "userPoolId": "<userPoolId>", "userName": "<userName>", "callerContext": { "awsSdk": "<calling aws sdk with version>", "clientId": "<apps client id>", ... }, "request": { "userAttributes": { "phone_number_verified": false, "email_verified": true, ... }, "codeParameter": "####", "usernameParameter": "username" }, "response": { "smsMessage": "<custom message to be sent in the message with code parameter and username parameter>" "emailMessage": "<custom message to be sent in the message with code parameter and username parameter>" "emailSubject": "<custom email subject>" } }