SDKsで AWS 認証方法を管理する - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SDKsで AWS 認証方法を管理する

Amazon Cognito ユーザープールのユーザーは、さまざまな初期サインインオプションまたは要因を使用してサインインできます。一部の要因では、ユーザーは多要素認証 (MFA) でフォローアップできます。これらの最初の要因には、ユーザー名とパスワード、ワンタイムパスワード、パスキー、カスタム認証などがあります。詳細については、「認証フロー」を参照してください。アプリケーションに組み込み UI コンポーネントがあり、 AWS SDK モジュールをインポートする場合は、認証用のアプリケーションロジックを構築する必要があります。2 つの主要な方法のいずれかを選択し、その方法から実装する認証メカニズムを選択する必要があります。

アプリケーションまたはクライアントが認証のタイプを事前に宣言するクライアントベースの認証を実装できます。もう 1 つのオプションは、アプリがユーザー名を収集し、ユーザーが使用できる認証タイプをリクエストする選択ベースの認証です。これらのモデルは、要件に応じて、同じアプリケーションにまとめて実装することも、アプリケーションクライアント間で分割することもできます。各メソッドには、クライアントベースのカスタム認証や、選択ベースのパスワードレス認証など、独自の機能があります。

ユーザープール API の AWS SDK 実装で認証を実行するカスタムビルドのアプリケーションでは、ユーザープール設定、アプリケーションクライアント設定、クライアント側の設定に合わせて API リクエストを構成する必要があります。AuthFlow の で始まるInitiateAuthセッションは、選択ベースの認証USER_AUTHを開始します。Amazon Cognito は、任意の認証方法または選択肢のリストのチャレンジで API に応答します。AuthFlow の で始まるセッションCUSTOM_AUTHは、Lambda トリガーによるカスタム認証に直接移行します。

一部の認証方法は 2 つのフロータイプのいずれかに固定され、一部の方法は両方で使用できます。

選択ベースの認証

アプリケーションは、選択ベースの認証で次の認証方法をリクエストできます。これらのオプションを InitiateAuth または AdminInitiateAuthPREFERRED_CHALLENGEパラメータ、または RespondToAuthChallenge または AdminRespondToAuthChallengeChallengeNameパラメータで宣言します。

API コンテキストでこれらのオプションを確認するには、ChallengeNameRespondToAuthChallenge」の「」を参照してください。

選択ベースのサインインは、最初のリクエストに応じてチャレンジを発行します。このチャレンジは、リクエストされたオプションが利用可能であることを確認するか、利用可能な選択肢のリストを提供します。アプリケーションは、これらの選択肢をユーザーに表示することができます。ユーザーは、希望するサインイン方法の認証情報を入力し、チャレンジレスポンスで認証を続行します。

認証フローには、次の選択ベースのオプションがあります。このタイプのすべてのリクエストでは、アプリが最初にユーザー名を収集するか、キャッシュから取得する必要があります。

  1. AuthParameters が のリクエストオプションUSERNAMEのみ。Amazon Cognito はSELECT_CHALLENGEチャレンジを返します。そこから、アプリケーションはユーザーにチャレンジを選択し、このレスポンスをユーザープールに返すように求めることができます。

  2. AuthParameters の で優先チャレンジをリクエストPREFERRED_CHALLENGEし、該当する場合は優先チャレンジのパラメータをリクエストします。たとえば、 PREFERRED_CHALLENGEの をリクエストする場合はPASSWORD_SRP、 も含める必要がありますSRP_A。ユーザー、ユーザープール、およびアプリケーションクライアントがすべて優先チャレンジ用に設定されている場合、Amazon Cognito は、フローやPASSWORD_SRPフローPASSWORD_VERIFIERCodeDeliveryDetails など、そのチャレンジの次のステップで応答しますEMAIL_OTPSMS_OTP。優先チャレンジが利用できない場合、Amazon Cognito は SELECT_CHALLENGEと利用可能なチャレンジのリストで応答します。

  3. 最初にユーザーにサインインし、選択ベースの認証オプションをリクエストします。サインインしたユーザーのアクセストークンを含む GetUserAuthFactors リクエストは、利用可能な選択ベースの認証要素と MFA 設定を返します。このオプションを使用すると、ユーザーはまずユーザー名とパスワードでサインインし、別の形式の認証をアクティブ化できます。このオペレーションを使用して、優先チャレンジでサインインしたユーザーの追加オプションを確認することもできます。

選択ベースの認証用にアプリケーションクライアントを設定するには、許可された認証フローALLOW_USER_AUTHに を追加します。また、ユーザープール設定で許可する選択ベースの要素を選択する必要があります。以下のプロセスは、選択ベースの認証要素を選択する方法を示しています。

Amazon Cognito console
ユーザープールで選択ベースの認証オプションを設定するには
  1. にサインイン AWS し、Amazon Cognito ユーザープールコンソールに移動します。ユーザープールを選択するか、新しいプールを作成します。

  2. ユーザープール設定で、サインインメニューを選択します。選択ベースのサインインのオプションを見つけ、編集を選択します。

  3. パスワードオプションは常に使用できます。これには、 フローPASSWORDPASSWORD_SRPフローが含まれます。ユーザーのオプションに追加する追加オプションを選択します。には PasskeyWEB_AUTHN、 には E メールメッセージのワンタイムパスワードEMAIL_OTP、 には SMS メッセージのワンタイムパスワードを追加できますSMS_OTP

  4. [Save changes] (変更の保存) をクリックします。

API/SDK

次の CreateUserPool または UpdateUserPool リクエスト本文の一部は、選択ベースの認証に使用できるすべてのオプションを設定します。

"Policies": { "SignInPolicy": { "AllowedFirstAuthFactors": [ "PASSWORD", "WEB_AUTHN", "EMAIL_OTP", "SMS_OTP" ] } },

クライアントベースの認証

クライアントベースの認証では、次の認証フローがサポートされています。これらのオプションを InitiateAuth または AdminInitiateAuthAuthFlowパラメータで宣言します。

  1. USER_PASSWORD_AUTH および ADMIN_USER_PASSWORD_AUTH

    永続パスワードでサインインする

    サインイン後の MFA

    この認証フローは、選択ベースの認証PASSWORDと同等です。

  2. USER_SRP_AUTH

    永続的なパスワードと安全なペイロードでサインインする

    サインイン後の MFA

    この認証フローは、選択ベースの認証PASSWORD_SRPと同等です。

  3. REFRESH_TOKEN_AUTH

    更新トークン

    この認証フローは、クライアントベースの認証でのみ使用できます。

  4. CUSTOM_AUTH

    カスタム認証

    この認証フローは、クライアントベースの認証でのみ使用できます。

クライアントベースの認証では、Amazon Cognito は、ユーザーが認証フローを開始する前に認証方法を決定したことを前提としています。ユーザーが提供したいサインイン要素を決定するロジックは、デフォルト設定またはカスタムプロンプトで決定し、ユーザープールへの最初のリクエストで宣言する必要があります。InitiateAuth リクエストは、 など、リストされたオプションの 1 つに直接対応するサインインAuthFlowを宣言しますUSER_SRP_AUTH。この宣言では、リクエストには、、、 などの認証を開始するためのパラメータも含まれますUSERNAMESECRET_HASHSRP_A。Amazon Cognito は、SRP や TOTP MFA PASSWORD_VERIFIER でのパスワードサインインなど、追加のチャレンジSOFTWARE_TOKEN_MFAでこのリクエストをフォローアップする場合があります。

クライアントベースの認証用にアプリクライアントを設定するには、許可された認証フローALLOW_USER_AUTHに 以外の認証フローを追加します。例としては、ALLOW_USER_PASSWORD_AUTHALLOW_CUSTOM_AUTH、 がありますALLOW_REFRESH_TOKEN_AUTH。クライアントベースの認証フローを許可するには、追加のユーザープール設定は必要ありません。