ユーザー移行の Lambda トリガーを使用したユーザーのインポート - Amazon Cognito

ユーザー移行の Lambda トリガーを使用したユーザーのインポート

このアプローチでは、ユーザーがアプリケーションで初めてサインインするとき、またはパスワードのリセットをリクエストするときに、既存のユーザーディレクトリからユーザープールにユーザーをシームレスに移行できます。ユーザー移行の Lambda トリガー 関数をユーザープールに追加すると、サインインしようとするユーザーに関するメタデータを受け取り、外部 ID ソースからユーザープロファイル情報を返します。この Lambda トリガーの詳細 (リクエストとレスポンスのパラメータなど) とサンプルコードについては、「ユーザー移行の Lambda トリガーのパラメータ」を参照してください。

ユーザーの移行を開始する前に、AWS アカウント でユーザー移行の Lambda 関数を作成し、ユーザープールに Lambda 関数 をユーザー移行トリガーとして設定します。Lambda 関数の呼び出しと、独自のユーザープールのコンテキスト内でのみの実行を、Amazon Cognito サービスアカウントプリンシパルである cognito-idp.amazonaws.com のみに許可する認可ポリシーを Lambda 関数に追加します。詳細については、「AWS Lambda のリソースベースのポリシーを使用する (Lambda 関数ポリシー)」を参照してください。

サインインプロセス

  1. ユーザーがアプリを開き、Amazon Cognito ユーザープール API または Amazon Cognito ホストされた UI を使用してサインインします。Amazon Cognito API でサインインを容易にする方法の詳細については、「Amazon Cognito の認証と認可を、ウェブアプリケーションとモバイルアプリケーションに統合する」を参照してください。

  2. アプリケーションはユーザー名とパスワードを 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 関数からユーザーのパスワードを隠します。

  3. Amazon Cognito は、送信されたユーザー名がユーザープール内のユーザー名またはエイリアスと一致するかどうかをチェックします。ユーザーの電子メールアドレス、電話番号、または優先ユーザー名を、ユーザープールのエイリアスとして設定できます。ユーザーが存在しない場合、Amazon Cognito は、ユーザー名やパスワードなどのパラメータを ユーザー移行の Lambda トリガー 関数に送信します。

  4. ユーザー移行の Lambda トリガー 関数は、既存のユーザーディレクトリまたはユーザーデータベースを使用してユーザーをチェックまたは認証します。この関数は、Amazon Cognito がユーザープールのユーザープロファイルに保存するユーザー属性を返します。送信されたユーザー名がエイリアス属性と一致する場合にのみ、username パラメータを返します。ユーザーが既存のパスワードを引き続き使用できるようにする場合は、Lambda レスポンスで属性 finalUserStatusCONFIRMED に設定します。アプリケーションは、ユーザー移行の Lambda トリガーのパラメータ に示されるすべての "response" パラメータを返す必要があります。

    重要

    リクエストイベントオブジェクト全体をユーザー移行 Lambda コードに記録しないでください。このリクエストイベントオブジェクトには、ユーザーのパスワードが含まれます。ログをサニタイズしない場合、パスワードが CloudWatch Logs に表示されます。

  5. Amazon Cognito はユーザープールにユーザープロファイルを作成し、トークンをアプリケーションクライアントに返します。

  6. アプリケーションはトークンの取り込みを実行し、ユーザー認証を受け入れ、リクエストされたコンテンツに進みます。

ユーザーを移行したら、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 で、パスワードを忘れた場合のフロー用の組み込みページを使用することもできます。