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

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

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

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

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

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

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

これらは、Amazon Cognito が共通パラメータのイベント情報と共にこの 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

ユーザーがサインイン時に入力するユーザー名。

パスワード

ユーザーがサインイン時に入力するパスワード。Amazon Cognito は、パスワードを忘れた場合のフローによって開始されたリクエストでこの値を送信しません。

validationData

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

clientMetadata

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

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

userAttributes

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

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

注記

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

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

サインイン用のユーザー名に加えてエイリアス属性を使用してユーザープールを設定しており、ユーザーがユーザー名として有効なエイリアスを入力している場合は、必須です。エイリアスの値は、E メールアドレス、優先ユーザー名、電話番号です。

リクエストとユーザープールがエイリアスの要件を満たしている場合、関数からのレスポンスは、受け取った username パラメータをエイリアス属性に割り当てる必要があります。また、レスポンスは username 属性に自身の値を割り当てる必要があります。ユーザープールが、受け取った username をエイリアスにマッピングするのに必要な条件を満たしていない場合、レスポンスの username パラメータはリクエストと完全に一致するか、省略する必要があります。

注記

username はユーザープールで一意である必要があります。

finalUserStatus

このパラメータを CONFIRMED に設定すると、ユーザーが以前のパスワードでサインインできるように自動確認することができます。ユーザーを CONFIRMED に設定した場合は、サインインする前に追加のアクション操作を実行する必要はありません。この属性を CONFIRMED に設定しない場合は、RESET_REQUIRED に設定されます。

RESET_REQUIREDfinalUserStatus は、サインイン時の移行後、ユーザーはすぐにパスワードを変更する必要があり、クライアントアプリは認証フロー中に PasswordResetRequiredException を処理する必要があることを意味します。

注記

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

messageAction

このパラメータを SUPPRESS に設定すると、通常、Amazon Cognito は新規ユーザーに送信するウェルカムメッセージの送信を拒否することができます。関数がこのパラメータを返さない場合、Amazon Cognito はウェルカムメッセージを送信します。

desiredDeliveryMediums

このパラメータを EMAIL に設定すると E メールで、SMS に設定すると SMS でウェルカムメッセージを送信できます。関数がこのパラメータを返さない場合、Amazon Cognito は SMS でウェルカムメッセージを送信します。

forceAliasCreation

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

このパラメータを、FALSE に設定し、エイリアスが存在する場合、Amazon Cognito はユーザーを移行せず、クライアントアプリにエラーを返します。

このパラメータを返さない場合、Amazon Cognito はその値が「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); } };