ユーザー移行の Lambda トリガーを使用したユーザープールへのユーザーのインポート - 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. ユーザーは、アプリケーションを開いて AWSAWS 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 のエイリアスも含む) が存在するかどうかを確認します。「ユーザー移行の Lambda トリガーのパラメータ」で詳しく説明されているとおり、ユーザーが存在しない場合、Amazon Cognito はユーザー名とパスワードを含むパラメータでユーザー移行の Lambda 関数を呼び出します。

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

    重要

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

  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 画面が提供されます。