AWS SDK で認証方法を管理する
Amazon Cognito ユーザープールのユーザーは、さまざまな初期サインインオプション (要素) を使用してサインインできます。一部の要素の場合、ユーザーは多要素認証 (MFA) を追加できます。これらの最初の要素として、ユーザー名とパスワード、ワンタイムパスワード、パスキー、カスタム認証などがあります。詳細については、「認証フロー」を参照してください。アプリケーションに UI コンポーネントが組み込まれていて、AWS SDK モジュールをインポートする場合は、認証用のアプリケーションロジックを構築する必要があります。2 つの主要な方法のいずれかを選択し、その方法に基づいて、実装する認証メカニズムを選択する必要があります。
クライアントベースの認証を実装できます。この場合、アプリケーションまたはクライアントが認証タイプを事前に宣言します。別の選択肢は、選択ベースの認証です。この場合、アプリケーションがユーザー名を収集し、ユーザーが使用できる認証タイプをリクエストします。これらのモデルは、要件に応じて、同じアプリケーションにまとめて実装することも、複数のアプリケーションクライアントに分割して実装することもできます。方法ごとに機能が異なります。例えば、クライアントベースにはカスタム認証があり、選択ベースにはパスワードなしの認証があります。
ユーザープール API の AWS SDK 実装で認証を実行するカスタム構築アプリケーションでは、ユーザープール設定、アプリケーションクライアント設定、クライアント側の設定に合わせて API リクエストを構成する必要があります。USER_AUTH の AuthFlow で始まる InitiateAuth セッションは、選択ベースの認証を開始します。Amazon Cognito は、優先する認証方法または選択肢のリストのいずれかをチャレンジとして使用し、API に応答します。CUSTOM_AUTH の AuthFlow で始まるセッションは、Lambda トリガーによるカスタム認証に直接進みます。
一部の認証方法は 2 つのフロータイプのいずれかに固定されており、一部の方法は両方で使用できます。
選択ベースの認証
アプリケーションは、選択ベースの認証として、以下の認証方法をリクエストできます。これらのオプションは、InitiateAuth または AdminInitiateAuth の PREFERRED_CHALLENGE パラメータで宣言するか、RespondToAuthChallenge または AdminRespondToAuthChallenge の ChallengeName パラメータで宣言します。
-
EMAIL_OTPおよびSMS_OTP -
WEB_AUTHN -
PASSWORD
これらのオプションを API コンテキストで確認するには、「RespondToAuthChallenge」で「ChallengeName」を参照してください。
選択ベースのサインインは、最初のリクエストに応じてチャレンジを発行します。このチャレンジは、リクエストされたオプションが利用可能であることを確認するか、利用可能な選択肢のリストを提供します。アプリケーションは、これらの選択肢をユーザーに表示することで、ユーザーが希望するサインイン方法の認証情報を入力し、チャレンジレスポンスで認証を続行できるようにします。
認証フローには、以下の選択ベースのオプションがあります。このタイプのすべてのリクエストでは、まずアプリケーションがユーザー名を収集するか、キャッシュから取得する必要があります。
-
USERNAMEのAuthParametersのみを使用するオプションをリクエストします。Amazon Cognito はSELECT_CHALLENGEチャレンジを返します。そこから、アプリケーションは、ユーザーに対してチャレンジを選択し、このレスポンスをユーザープールに返すよう求めることができます。 -
PREFERRED_CHALLENGEのAuthParametersと優先チャレンジのパラメータ (ある場合) を使用して優先チャレンジをリクエストします。例えば、PASSWORD_SRPのPREFERRED_CHALLENGEをリクエストする場合は、SRP_Aも含める必要があります。ユーザー、ユーザープール、アプリケーションクライアントがすべて優先チャレンジ用に設定されている場合、Amazon Cognito は、そのチャレンジの次のステップ (PASSWORD_SRPフローのPASSWORD_VERIFIER、EMAIL_OTPフリーやSMS_OTPフローの CodeDeliveryDetails など) を返します。優先チャレンジが利用できない場合、Amazon Cognito はSELECT_CHALLENGEと利用可能なチャレンジのリストを返します。 -
最初にユーザーをサインインさせ、次に選択ベースの認証オプションをリクエストします。サインインしたユーザーのアクセストークンを含む GetUserAuthFactors リクエストは、利用可能な選択ベースの認証要素と MFA 設定を返します。このオプションを使用すると、ユーザーは最初にユーザー名とパスワードでサインインし、次に別の認証形式をアクティブ化できます。このオペレーションを使用して、優先チャレンジでサインインしたユーザーの追加のオプションを確認することもできます。
選択ベースの認証用にアプリケーションクライアントを設定するには、許可された認証フローに ALLOW_USER_AUTH を追加します。また、ユーザープール設定で許可する選択ベースの要素を選択する必要があります。以下のプロセスは、選択ベースの認証要素を選択する方法を示しています。
クライアントベースの認証
クライアントベースの認証は、以下の認証フローをサポートします。これらのオプションは、InitiateAuth または AdminInitiateAuth の AuthFlow パラメータで宣言します。
-
USER_PASSWORD_AUTHおよびADMIN_USER_PASSWORD_AUTHこの認証フローは、選択ベースの認証の
PASSWORDと同等です。 -
USER_SRP_AUTHこの認証フローは、選択ベースの認証の
PASSWORD_SRPと同等です。 -
REFRESH_TOKEN_AUTHこの認証フローは、クライアントベースの認証でのみ使用できます。
-
CUSTOM_AUTHこの認証フローは、クライアントベースの認証でのみ使用できます。
クライアントベースの認証の場合、Amazon Cognito は、ユーザーが認証フローを開始する前に認証方法を決定済みであると想定します。ユーザーが提供するサインイン要素を決定するロジックは、デフォルト設定またはカスタムプロンプトで決定し、ユーザープールへの最初のリクエストで宣言する必要があります。InitiateAuth リクエストは、リストされているオプションの 1 つ (USER_SRP_AUTH など) に直接対応するサインイン AuthFlow を宣言します。この宣言により、リクエストには、認証を開始するためのパラメータ (USERNAME、SECRET_HASH、SRP_A など) も含まれます。Amazon Cognito は、このリクエストに続けて、SRP の PASSWORD_VERIFIER や TOTP MFA によるパスワードサインインの SOFTWARE_TOKEN_MFA など、追加のチャレンジを発行する場合があります。
クライアントベースの認証用にアプリケーションクライアントを設定するには、許可された認証フローに ALLOW_USER_AUTH 以外の認証フローを追加します。例えば、ALLOW_USER_PASSWORD_AUTH、ALLOW_CUSTOM_AUTH、ALLOW_REFRESH_TOKEN_AUTH を追加します。クライアントベースの認証フローを許可するために、追加のユーザープール設定を行う必要はありません。