ユーザー移行の Lambda トリガー - Amazon Cognito

ユーザー移行の Lambda トリガー

Amazon Cognito は、パスワードによるサインイン時にユーザーがユーザープールに存在しない場合、またはユーザーがパスワードを忘れた場合のフローにいる場合に、このトリガーを呼び出します。Amazon Cognito は、Lambda 関数が正常に値を返した後でユーザーをユーザープールに作成します。ユーザー移行の Lambda トリガーを使用した認証フローの詳細については、「ユーザー移行の Lambda トリガーを使用したユーザープールへのユーザーのインポート」を参照してください。

この Lambda トリガーを使用して、サインイン時、またはパスワードを忘れた場合のフロー中に、ユーザーを既存のユーザーディレクトリから Amazon Cognito ユーザープールに移行できます。

ユーザー移行の Lambda トリガーのソース

triggerSource 値 トリガーイベント
UserMigration_Authentication サインイン時のユーザー移行
UserMigration_ForgotPassword パスワードを忘れた場合のフロー実行時のユーザー移行

ユーザー移行の Lambda トリガーのパラメータ

これらは、一般的なパラメータに加えて、この Lambda 関数で必要となるパラメータです。

JSON
{ "userName": "string", "request": { "password": "string", "validationData": { "string": "string", . . . }, "clientMetadata": { "string": "string", . . . } }, "response": { "userAttributes": { "string": "string", . . . }, "finalUserStatus": "string", "messageAction": "string", "desiredDeliveryMediums": [ "string", . . .], "forceAliasCreation": boolean } }

ユーザー移行リクエストパラメータ

userName

ユーザーが入力したユーザー名。

password

サインイン用にユーザーが入力したパスワード。パスワードを忘れた場合のフローでは設定されません。

validationData

ユーザーサインインリクエストに検証データを含む 1 つ以上のキー - 値ペア。このデータは、InitiateAuth および AdminInitiateAuth API アクションで ClientMetadata パラメータを使用することによって Lambda 関数に渡すことができます。

clientMetadata

ユーザー移行のトリガーに指定する Lambda 関数へのカスタム入力として提供できる 1 つ、または複数のキー/値ペア。このデータは、AdminRespondToAuthChallenge および ForgotPassword API アクションで ClientMetadata パラメータを使用することによって Lambda 関数に渡すことができます。

ユーザー移行レスポンスパラメータ

userAttributes

このフィールドは必須です。

ユーザープール内のユーザープロファイルに保存されるユーザー属性を表す、名前と値のペアが 1 つ以上含まれている必要があります。標準およびカスタムの両方のユーザー属性を含めることができます。カスタム属性は、標準属性と区別するために、custom: プレフィックスを必要とします。詳細については、「カスタム属性」を参照してください。

注記

ユーザーがパスワードを忘れた場合のフローでパスワードをリセットするには、検証済みの E メールまたは電話番号のどちらかが必要です。Amazon Cognito は、ユーザー属性にある E メールアドレスまたは電話番号宛てに、パスワードのリセットコードが含まれるメッセージを送信します。

属性 要件
ユーザープールの作成時に必須とマークした属性 移行時に必須属性が見当たらない場合は、デフォルト値が使用されます。
username

サインイン用のユーザー名に加えてエイリアスを使用してユーザープールを設定しており、ユーザーがサインイン用にエイリアスを入力している場合は、必須です。

それ以外の場合は、オプションであり、ユーザーが入力するユーザー名の代わりに使用されます。

注記

ユーザー名はユーザープール内で一意であることが必要です。

finalUserStatus

サインイン時に、この属性を CONFIRMED に設定できます。設定しない場合、ユーザーは自動確認され、前回のパスワードでサインインできます。この場合、ユーザーのエクスペリエンスは最もシンプルになります。

この属性を RESET_REQUIRED に設定した場合、ユーザーは移行直後のサインイン時に自分のパスワードを変更する必要があり、クライアントアプリケーションは認証フローの実行時に PasswordResetRequiredException を処理する必要があります。

注記

ユーザープールに設定されたパスワード強度ポリシーは、Lambda トリガーを使用した移行中に施行されません。パスワードは、設定されたパスワードポリシーを満たさない場合でも受諾され、ユーザーの移行を続行できるようにします。パスワード強度ポリシーを施行してポリシーを満たさないパスワードを拒否するには、コード内のパスワード強度を検証して、パスワードがポリシーを満たさない場合の FinalUserStatus を RESET_REQUARD に設定します。

messageAction

この属性は、通常 Amazon Cognito が新規ユーザーに送信するウェルカムメッセージを抑制するために「SUPPRESS」に設定することができます。この属性が返されない場合は、ウェルカムメッセージが送信されます。

desiredDeliveryMediums

この属性は、ウェルカムメッセージを E メールで送信する場合は "EMAIL" に、SMS で送信する場合は "SMS" に設定できます。この属性が返されない場合は、ウェルカムメッセージが SMS で送信されます。

forceAliasCreation

このパラメータを "true" に設定した場合、UserAttributes パラメータで指定した E メールアドレスまたは電話番号がすでに別のユーザーのエイリアスとして存在していると、API の呼び出しで以前のユーザーのエイリアスが新しく作成されたユーザーに移行されます。以前のユーザーはそのエイリアスを使用してログインできなくなります。

この属性を "false" に設定した場合、エイリアスが存在していても、ユーザーは移行されず、エラーがクライアントアプリケーションに返されます。

この属性が返されない場合は、"false" とみなされます。

例: 既存のパスワードを使用したユーザーの移行

この例の Lambda 関数は、既存のパスワードを使用してユーザーを移行し、Amazon Cognito からのウェルカムメッセージを抑制します。

Node.js
exports.handler = (event, context, callback) => { var user; if ( event.triggerSource == "UserMigration_Authentication" ) { // authenticate the user with your existing user directory service user = authenticateUser(event.userName, event.request.password); if ( user ) { event.response.userAttributes = { "email": user.emailAddress, "email_verified": "true" }; event.response.finalUserStatus = "CONFIRMED"; event.response.messageAction = "SUPPRESS"; context.succeed(event); } else { // Return error to Amazon Cognito callback("Bad password"); } } else if ( event.triggerSource == "UserMigration_ForgotPassword" ) { // Lookup the user in your existing user directory service user = lookupUser(event.userName); if ( user ) { event.response.userAttributes = { "email": user.emailAddress, // required to enable password-reset code to be sent to user "email_verified": "true" }; event.response.messageAction = "SUPPRESS"; context.succeed(event); } else { // Return error to Amazon Cognito callback("Bad password"); } } else { // Return error to Amazon Cognito callback("Bad triggerSource " + event.triggerSource); } };