メニュー
Amazon Cognito
開発者ガイド (Version 最終更新日: 2017 年 8 月 26 日)

ユーザーアカウントのサインアップと確認

ユーザーアカウントは次の方法の 1 つでユーザープールに追加されます。

サインアップするユーザーは、サインインする前に確認が求められます。インポートされ作成されたユーザーはすでに確認されていますが、初めてサインインするときはパスワードを作成する必要があります。以下のセクションで、確認プロセス、E メール、電話確認について説明します。

ユーザーアカウント確認の概要

次の図は確認プロセスを示しています。

 ユーザーが確認コードを入力すると、自動的に E メールまたは電話を確認します。

ユーザーアカウントは、以下のいずれかの状態になります。

登録済み (未確認)

ユーザーは正常にサインアップできますが、ユーザーアカウントを確認するまではサインインできません。ユーザーは有効ですが、この状態で確認されていません。

サインアップする新しいユーザーはこの状態から開始します。

確認済み

ユーザーアカウントが確認され、ユーザーはサインインできます。ユーザーが E メールまたは電話 (SMS) (または、E メールの場合確認リンクをクリックして) で受け取った確認コードを入力してユーザーアカウントを確認している場合は、E メールまたは電話番号が自動的に確認されます。ユーザーアカウントが管理者またはプレサインアップ Lambda トリガーによって確認されている場合、確認の E メールまたは電話番号がアカウントに関連付けられない場合もあります。

パスワードのリセットが必要

ユーザーアカウントは確認されましたが、ユーザーはサインインする前にコードをリクエストし、自身のパスワードをリセットする必要があります。

管理者または開発者がインポートしたユーザーアカウントは、この状態から開始します。

パスワードの強制変更

ユーザーアカウントが確認され、ユーザーは一時パスワードを使用してサインインできますが、初回のサインイン時にパスワードを変更して、他の操作を行う前に値を変更できないようにする必要があります。

管理者または開発者が作成したユーザーアカウントは、この状態から開始します。

Disabled

ユーザーアカウントを削除する前に、無効にする必要があります。

サインアップと自身の確認、E メールまたは電話の確認をユーザーに許可する

  1. ユーザーは、ユーザー名、メールアドレス、電話番号やその他の属性を入力してアプリにサインアップします。

  2. Amazon Cognito サービスは、アプリからサインアップのリクエストを受け取ります。サインアップに必要なすべての属性がリクエストに含まれることを確認した後で、サービスはサインアッププロセスを完了し、確認コードをユーザーの電話 (SMS 経由で) または E メールに送信 します。

    注記

    ユーザーが電話番号とメールアドレスの両方にサインアップし、ユーザープール設定で両方の属性の確認が必要な場合は、確認コードが SMS 経由で電話に送信されます。E メールアドレスが検証されていません。 アプリは GetUser を呼び出して、メールアドレスが認証を待っているかどうかを確認できます。認証を待っている場合、アプリは GetUserAttributeVerificationCode を呼び出して E メール確認フローを開始し、VerifyUserAttribute を呼び出して確認コードを送信する必要があります。

  3. サービスは、サインアップが完了しユーザーアカウントが確認保留であることを返します。応答には、確認コードの送信先に関する情報が含まれます。この時点でユーザーアカウントは未確認状態になり、ユーザーのメールアドレスと電話番号は未確認です。

  4. アプリは、ユーザーに確認コードを入力するよう求めるメッセージを表示できます。ユーザーは、コードをすぐに入力する必要はありません。ただし、確認コードを入力するまでユーザーはサインインできません。

  5. ユーザーがアプリに確認コードを入力します。

  6. アプリは ConfirmSignUp を呼び出してコードを Amazon Cognito サービスに送信します。これはコードを確認し、コードが正しければ、ユーザーのアカウントを確認済み状態に設定します。正常にユーザーアカウントを確認した後で、Amazon Cognito サービスは確認 (E メールまたは電話番号) で使用して確認済みとするための属性を自動的にマーキングします。この属性の値が変更されていない場合、ユーザーはそれを再度確認する必要はありません。

  7. この時点で、ユーザーアカウントは確認済みの状態になっており、ユーザーはサインインできます。

ユーザーにアプリへのサインアップを許可するが管理者として確認する

  1. ユーザーは、ユーザー名、メールアドレス、電話番号やその他の属性を入力してアプリにサインアップします。

  2. Amazon Cognito サービスは、アプリからサインアップのリクエストを受け取ります。サインアップに必要なすべての属性がリクエストに含まれることを確認した後で、サービスはサインアッププロセスを完了し、アプリにサインアップが完了し確認が保留中であることをアプリに返します。この時点でユーザーのアカウントは未確認状態です。アカウントが確認されるまで、ユーザーはサインインすることはできません。

  3. 管理者は Amazon Cognito コンソール ([Users] タブでユーザーアカウントを見つけて [Confirm] ボタンを押して) または CLI (admin-confirm-sign-up コマンドを使用して) のいずれかでユーザーのアカウントを確認します。[Confirm] ボタンと admin-confirm-sign-up コマンドは、AdminConfirmSignUp API を使用して確認を行います。

  4. この時点で、ユーザーアカウントは確認済みの状態になっており、ユーザーはサインインできます。

SecretHash 値の計算

次の Amazon Cognito ユーザープール API には、SecretHash パラメータがあります。

SecretHash 値は、Base 64 でエンコードされたキーつきハッシュメッセージ認証コード (HMAC) であり、ユーザープールクライアントおよびユーザー名、さらにメッセージ内のクライアント ID を使用して計算されたものです。次の擬似コードは、この値の計算方法を示します。この擬似コードで + は連結を表し、HMAC_SHA256 は HmacSHA256 を使用して HMAC 値を生成する関数を、Base64 は Base-64 でエンコードされたバージョンのハッシュ出力を生成する関数を示します。

Copy
Base64 ( HMAC_SHA256 ( "Client Secret Key", "Username" + "Client Id" ) )

また、サーバー側の Java アプリケーションコードで、次のコード例を使用することもできます。

Copy
import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; public static String calculateSecretHash(String userPoolClientId, String userPoolClientSecret, String userName) { final String HMAC_SHA256_ALGORITHM = "HmacSHA256"; SecretKeySpec signingKey = new SecretKeySpec( userPoolClientSecret.getBytes(StandardCharsets.UTF_8), HMAC_SHA256_ALGORITHM); try { Mac mac = Mac.getInstance(HMAC_SHA256_ALGORITHM); mac.init(signingKey); mac.update(userName.getBytes(StandardCharsets.UTF_8)); byte[] rawHmac = mac.doFinal(userPoolClientId.getBytes(StandardCharsets.UTF_8)); return Base64.getEncoder().encodeToString(rawHmac); } catch (Exception e) { throw new RuntimeException("Error while calculating "); } }

E メールまたは電話番号の確認なしでユーザーアカウントを確認する

プレサインアップ Lambda トリガーを使用して、確認コードまたは E メールまたは電話番号なしでサインアップ時にユーザーアカウントを自動確認できます。この方法で確認されたユーザーは、コードを受け取らないですぐにサインインできます。

このトリガーによって検証されたユーザーのメールまたは電話番号をマーキングすることもできます。

注記

これはユーザーが始めるにあたって便利な方法ですが、E メールまたは電話番号を少なくとも 1 つ自動検証することをお勧めします。そうしないと、ユーザーがパスワードを忘れた際に復旧できないままになる場合があります。

ユーザーのサインアップ時に確認コードの受信と入力を求めず、プレサインアップ Lambda トリガーでメールや電話番号を自動検証しない場合は、そのユーザーアカウントに検証済み E メールアドレスまたは電話番号がないリスクがあります。ユーザーはメールアドレスまたは電話番号を後で確認できます。ただし、パスワードを忘れて確認済みのメールアドレスまたは電話番号がない場合、パスワードを忘れた場合のフローで確認コードをユーザーに送信するために確認済みのメールアドレスまたは電話番号が必要となるため、ユーザーはアカウントからロックアウトされます。

ユーザーが E メールまたは電話番号を変更するときに確認する

ユーザーがアプリ内で自身のメールアドレスまたは電話番号を変更すると、その属性が未検証としてマークされます。更新された属性に対して自動検証が有効になっていた場合は、サービスによって即時に確認コードが含まれるメッセージがユーザーに送信され、ユーザーはそのコードを入力して変更を確認します。カスタムメッセージ Lambda トリガーを使用してこのメッセージをカスタマイズできます。詳細については、「AWS Lambda トリガーを使用したユーザープールのワークフローのカスタマイズ」を参照してください。ユーザーのメールアドレスまたは電話番号が未確認の場合、アプリは未確認のステータスを表示し、ユーザーが新しい E メールまたは電話番号を確認するためのボタンまたはリンクを提供する必要があります。

管理者または開発者が作成するユーザーアカウントの確認および検証プロセス

管理者または開発者が作成したユーザーアカウントは常に確認済み状態にあるため、ユーザーは確認コードを入力する必要はありません。Amazon Cognito サービスがこれらのユーザーに送信する招待メッセージには、ユーザー名と一時パスワードが含まれています。ユーザーは、サインインする前にパスワードを変更する必要があります。詳細について、は、「AWS マネジメントコンソールでの Amazon Cognito User Pools API を使用した管理者としてのユーザーアカウントの作成」の「[Message Customizations] タブ」と「AWS Lambda トリガーを使用したユーザープールのワークフローのカスタマイズ」のカスタムメッセージのトリガーを参照してください。

インポート済みユーザーアカウントの確認および検証プロセス

AWS マネジメントコンソール、CLI、または API (「ユーザープールにユーザーをインポートする」を参照) でユーザーのインポート機能を使用して作成されたユーザーアカウントは常に確認済み状態にあるため、ユーザーは確認コードを入力する必要はありません。招待メッセージは送信されません。ただし、インポートされたユーザーアカウントでは、サインインする前にまず ForgotPassword API を呼び出してコードをリクエストし、次に提供されたコードを使用して ConfirmForgotPassword API を呼び出しパスワードを作成する必要があります。詳細については、「インポートされたユーザーにパスワードをリセットするように要求」を参照してください。

ユーザーアカウントがインポートされたときに、ユーザーの E メールまたは電話番号は確認済みとしてマークする必要があります。したがって、ユーザーがサインインする際に認証は必要ありません。