Amazon Cognito
開発者ガイド

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

この方法では、ユーザーが新しい Amazon Cognito 対応アプリケーションを初めて使用するときに、既存のユーザーディレクトリからユーザープールへのユーザーのシームレスな移行が可能です。この移行は、初回サインイン時、またはパスワードを忘れた場合のフロー実行時に行うことができます。この移行を有効にするには、ユーザープール用にユーザー移行 Lambda 関数を設定する必要があります。この Lambda トリガーの詳細 (リクエストとレスポンスのパラメータなど) とサンプルコードについては、「ユーザー移行 Lambda トリガーパラメータ」を参照してください。

ユーザー移行プロセスを開始する前に、AWS アカウントでユーザー移行 Lambda 関数を作成し、ユーザー移行トリガーにこの Lambda 関数 ARN を使用するようにユーザープールを設定します。Lambda 関数に権限付与ポリシーを追加して、 Amazon Cognito サービスアカウントプリンシパル ("cognito-idp.amazonaws.com") とユーザープールの SourceARN のみがこの Lambda 関数を呼び出すことができ、AWS の他のお客様のユーザープールからは呼び出せないようにします。詳細については、「AWS Lambda のリソースベースのポリシー (Lambda 関数ポリシー) の使用」を参照してください。

サインイン時の手順

  1. ユーザーはアプリケーションを開き、AWS Mobile SDK の Cognito Identity Provider API を使用するアプリケーションのネイティブのサインイン UI 画面でサインインするか、Amazon Cognito Auth SDK と連動する Amazon Cognito のホストサインイン UI でサインインします。

  2. アプリケーションはユーザー名とパスワードを Amazon Cognito に送信します。アプリケーションにネイティブのサインイン UI があり、Cognito Identity Provider SDK を使用している場合は、SDK がパスワードをサーバーに送信する USER_PASSWORD_AUTH フローをアプリケーションで使用する必要があります (アプリケーションでデフォルトの USER_SRP_AUTH フローを使用しないでください。SRP 認証フローでは、SDK がパスワードをサーバーに送信しないためです)。USER_PASSWORD_AUTH フローを有効にするには、AuthenticationDetails.authenticationType を "USER_PASSWORD" に設定します。

  3. Amazon Cognito は、ユーザープールにユーザー名 (ユーザーの E メール、電話番号、または preferred_username のエイリアスも含む) が存在するかどうかを確認します。ユーザーが存在しない場合、Amazon Cognito はユーザー移行 Lambda 関数を呼び出して、ユーザー名とパスワードを含むパラメータを渡します (詳細については「ユーザー移行 Lambda トリガーパラメータ」を参照)。

  4. ユーザー移行 Lambda 関数は、既存のサインインサービスを呼び出すことで、既存のユーザーディレクトリまたはユーザーデータベースに対してユーザーを認証し、ユーザープール内のユーザーのプロファイルに保存されるユーザー属性を返します。ユーザーが既存のパスワードを引き続き使用できるようにする場合は、Lambda レスポンスで属性 finalUserStatus = "CONFIRMED" を設定します。レスポンスの必須の属性については、「ユーザー移行 Lambda トリガーパラメータ」を参照してください。

    重要

    ユーザー移行 Lambda のコードでは、リクエストイベントオブジェクト全体がログに記録されないようにしてください (CloudWatch ログに送信されるログレコードにはパスワードが含まれるため)。また、パスワードがログに記録されないようにログをサニタイズしてください。

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

  6. サインイン後、アプリケーションクライアントはその通常の機能を使用できるようになりました。

ユーザー移行後は、ネイティブのモバイルアプリケーションで USER_SRP_AUTH フローをサインインに使用することをお勧めします。このフローでは、パスワードをネットワーク経由で送信せずに Secure Remote Password (SRP) プロトコルを使用してユーザーを認証するため、移行中に使用される USER_PASSWORD_AUTH フローよりもセキュリティ上の利点が大きくなります。

移行中にクライアントデバイスやネットワークの問題などのエラーが発生した場合、アプリケーションは Amazon Cognito ユーザープール API からエラーレスポンスを受け取り、ユーザープールにユーザーアカウントが作成されていない可能性があります。ユーザーがサインインを再試行し、繰り返し失敗した場合、アプリケーションでパスワードを忘れた場合のフローを使用してパスワードをリセットする必要があります。

パスワードを忘れた場合のフローは同様に機能しますが、ユーザー移行 Lambda 関数にパスワードが渡されず、単に既存のユーザーディレクトリでユーザーが検索されて、ユーザープールに保存される属性が返される点は異なります。その後、Amazon Cognito はユーザーに E メールまたは SMS でパスワードのリセットコードを送信し、ユーザーはアプリケーションで新しいパスワードを設定できます。アプリケーションにネイティブの UI がある場合は、パスワードを忘れた場合のフロー用の画面を用意する必要があります。アプリケーションで Amazon Cognito のホスト UI を使用している場合、UI 画面はあらかじめ用意されています。