ユーザー移行の Lambda トリガーを使用したユーザーのインポート
このアプローチでは、ユーザーがアプリケーションで初めてサインインするとき、またはパスワードのリセットをリクエストするときに、既存のユーザーディレクトリからユーザープールにユーザーをシームレスに移行できます。ユーザー移行の Lambda トリガー 関数をユーザープールに追加すると、サインインしようとするユーザーに関するメタデータを受け取り、外部 ID ソースからユーザープロファイル情報を返します。この Lambda トリガーの詳細 (リクエストとレスポンスのパラメータなど) とサンプルコードについては、「ユーザー移行の Lambda トリガーのパラメータ」を参照してください。
ユーザーの移行を開始する前に、AWS アカウント でユーザー移行の Lambda 関数を作成し、ユーザープールに Lambda 関数 をユーザー移行トリガーとして設定します。Lambda 関数の呼び出しと、独自のユーザープールのコンテキスト内でのみの実行を、Amazon Cognito サービスアカウントプリンシパルである cognito-idp.amazonaws.com
のみに許可する認可ポリシーを Lambda 関数に追加します。詳細については、「AWS Lambda のリソースベースのポリシーを使用する (Lambda 関数ポリシー)」を参照してください。
サインインプロセス
-
ユーザーがアプリを開き、Amazon Cognito ユーザープール API または Amazon Cognito ホストされた UI を使用してサインインします。Amazon Cognito API でサインインを容易にする方法の詳細については、「Amazon Cognito の認証と認可を、ウェブアプリケーションとモバイルアプリケーションに統合する」を参照してください。
-
アプリケーションはユーザー名とパスワードを Amazon Cognito に送信します。アプリケーションに AWS SDK を使用して構築したカスタムサインイン UI がある場合、アプリケーションは、
USER_PASSWORD_AUTH
またはADMIN_USER_PASSWORD_AUTH
フローで InitiateAuth または AdminInitiateAuth を使用する必要があります。アプリがこれらのフローのいずれかを使用する場合、SDK はパスワードをサーバーに送信します。注記
ユーザー移行トリガーを追加する前に、アプリケーションクライアントの設定で
USER_PASSWORD_AUTH
またはADMIN_USER_PASSWORD_AUTH
フローを有効化します。デフォルトのUSER_SRP_AUTH
フロー の代わりにこれらのフローを使用する必要があります。Amazon Cognito は、他のディレクトリでのユーザーの認証を検証できるように、Lambda 関数にパスワードを送信する必要があります。SRP は、Lambda 関数からユーザーのパスワードを隠します。 -
Amazon Cognito は、送信されたユーザー名がユーザープール内のユーザー名またはエイリアスと一致するかどうかをチェックします。ユーザーの電子メールアドレス、電話番号、または優先ユーザー名を、ユーザープールのエイリアスとして設定できます。ユーザーが存在しない場合、Amazon Cognito は、ユーザー名やパスワードなどのパラメータを ユーザー移行の Lambda トリガー 関数に送信します。
-
ユーザー移行の Lambda トリガー 関数は、既存のユーザーディレクトリまたはユーザーデータベースを使用してユーザーをチェックまたは認証します。この関数は、Amazon Cognito がユーザープールのユーザープロファイルに保存するユーザー属性を返します。送信されたユーザー名がエイリアス属性と一致する場合にのみ、
username
パラメータを返します。ユーザーが既存のパスワードを引き続き使用できるようにする場合は、Lambda レスポンスで属性finalUserStatus
をCONFIRMED
に設定します。アプリケーションは、ユーザー移行の Lambda トリガーのパラメータ に示されるすべての"response"
パラメータを返す必要があります。重要
リクエストイベントオブジェクト全体をユーザー移行 Lambda コードに記録しないでください。このリクエストイベントオブジェクトには、ユーザーのパスワードが含まれます。ログをサニタイズしない場合、パスワードが CloudWatch Logs に表示されます。
-
Amazon Cognito はユーザープールにユーザープロファイルを作成し、トークンをアプリケーションクライアントに返します。
-
アプリケーションはトークンの取り込みを実行し、ユーザー認証を受け入れ、リクエストされたコンテンツに進みます。
ユーザーを移行したら、USER_SRP_AUTH
を使用してサインインします。Secure Remote Password (SRP) プロトコルは、パスワードをネットワーク上に送信しないため、移行時に使用する USER_PASSWORD_AUTH
フローよりもセキュリティ上の利点が大きくなります。
移行中にクライアントデバイスやネットワークの問題などのエラーが発生した場合、アプリケーションは Amazon Cognito ユーザープール API からエラーレスポンスを受け取ります。この場合 Amazon Cognito はユーザープールにユーザーアカウントを作成しない可能性があります。その後、ユーザーは再度サインインを試行する必要があります。サインインが繰り返し失敗した場合、アプリケーションでパスワードを忘れた場合のフローを使用してユーザーのパスワードをリセットする必要があります。
パスワードを忘れた場合のフローでは、UserMigration_ForgotPassword
イベントソースを使用して ユーザー移行の Lambda トリガー 関数も呼び出します。ユーザーはパスワードのリセットをリクエストしてもパスワードを送信しないため、Amazon Cognito は Lambda 関数に送信するイベントにパスワードを含めません。関数では、既存のユーザーディレクトリ内のユーザーのみを検索し、ユーザープールのユーザープロファイルに追加する属性を返すことができます。関数が呼び出しを完了して Amazon Cognito に応答を返すと、ユーザープールはパスワードリセットコードを E メールまたは SMS で送信します。アプリケーションで、ユーザーに確認コードと新しいパスワードの入力を促し、その情報を ConfirmForgotPassword API リクエストで Amazon Cognito に送信します。。Amazon Cognito がホストする UI で、パスワードを忘れた場合のフロー用の組み込みページを使用することもできます。