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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

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

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

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

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

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

Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。

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

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

userName

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

password

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

validationData

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

clientMetadata

ユーザー移行のトリガーの Lambda 関数へのカスタム入力として提供できる 1 つ、または複数のキーバリューペア。このデータを Lambda 関数に渡すには、 AdminRespondToAuthChallenge および ForgotPasswordAPIアクションで 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」であると見なします。

有効にするSMSMFA

このパラメータを に設定するとtrue、移行したユーザーがSMSテキストメッセージの多要素認証 (MFA) を完了してサインインする必要があります。ユーザープールMFAが有効になっている必要があります。リクエストパラメータのユーザー属性には、電話番号を含める必要があります。電話番号がないと、そのユーザーの移行は失敗します。

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

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

Node.js
const validUsers = { belladonna: { password: "Test123", emailAddress: "bella@example.com" }, }; // Replace this mock with a call to a real authentication service. const authenticateUser = (username, password) => { if (validUsers[username] && validUsers[username].password === password) { return validUsers[username]; } return null; }; const lookupUser = (username) => { const user = validUsers[username]; if (user) { return { emailAddress: user.emailAddress }; } return null; }; const handler = async (event) => { if (event.triggerSource === "UserMigration_Authentication") { // Authenticate the user with your existing user directory service const 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"; } } else if (event.triggerSource === "UserMigration_ForgotPassword") { // Look up the user in your existing user directory service const 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"; } } return event; }; export { handler };