翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
認証チャレンジの定義の Lambda トリガー
認証チャレンジ定義トリガーは、カスタム認証フローでチャレンジシーケンスを維持する Lambda 関数です。チャレンジシーケンスの成功または失敗を宣言し、シーケンスがまだ完了していない場合に次のチャレンジを設定します。
- 認証チャレンジの定義
-
Amazon Cognito は、このトリガーを呼び出してカスタム認証フローを開始します。
この Lambda トリガーのリクエストには、session
が含まれます。session
パラメータは、現在の認証プロセスでユーザーに提示されたすべてのチャレンジが含まれる配列です。リクエストには、対応する結果も含まれます。session
配列は、チャレンジの詳細 (ChallengeResult
) を時系列に保存します。チャレンジ session[0]
は、ユーザーが最初に受け取るチャレンジを表します。
Amazon Cognito では、カスタムチャレンジを発行する前にユーザーパスワードを検証させることができます。リクエストレートクォータの認証カテゴリに関連付けられた Lambda トリガーは、カスタムチャレンジフローでSRP認証を実行すると実行されます。以下は、そのプロセスの概要です。
-
アプリは、
AuthParameters
マップを使用してInitiateAuth
またはAdminInitiateAuth
を呼び出してサインインを開始します。パラメータにはCHALLENGE_NAME: SRP_A,
、SRP_A
およびUSERNAME
の値を含める必要があります。 -
Amazon Cognito は、
challengeName: SRP_A
とchallengeResult: true
を含む初期セッションで、認証チャレンジの定義 Lambda トリガーを呼び出します。 -
Lambda 関数は、これらの入力を受け取った後、
challengeName: PASSWORD_VERIFIER
、issueTokens: false
、failAuthentication: false
で応答します。 -
パスワードの検証が成功すると、Amazon Cognito
challengeName: PASSWORD_VERIFIER
とchallengeResult: true
が含まれる新しいセッションで Lambda 関数を再度呼び出します。 -
カスタムチャレンジを開始するために、Lambda 関数は
challengeName: CUSTOM_CHALLENGE
、issueTokens: false
、およびfailAuthentication: false
で応答します。パスワード検証でカスタム認証フローを開始したくない場合は、CHALLENGE_NAME: CUSTOM_CHALLENGE
を含むAuthParameters
マップでサインインを開始できます。 -
チャレンジループは、すべてのチャレンジが回答されるまで繰り返します。
以下は、SRPフローによるカスタム認証の前に開始InitiateAuth
リクエストの例です。
{ "AuthFlow": "CUSTOM_AUTH", "ClientId": "1example23456789", "AuthParameters": { "CHALLENGE_NAME": "SRP_A", "USERNAME": "testuser", "SRP_A": "[SRP_A]", "SECRET_HASH": "[secret hash]" } }
認証チャレンジの定義の Lambda トリガーのパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。
認証チャレンジの定義のリクエストパラメータ
Amazon Cognito が Lambda 関数を呼び出すときに、次のパラメータを提供します。
- userAttributes
-
ユーザー属性を表す 1 つ以上の名前 - 値ペア。
- userNotFound
-
ユーザープールクライアントの
PreventUserExistenceErrors
がENABLED
に設定されている場合に、Amazon Cognito が入力するブール値です。true
の値は、ユーザー ID (ユーザー名、メールアドレス、その他の詳細など) が既存のいずれのユーザーとも一致しなかったことを意味します。PreventUserExistenceErrors
がENABLED
に設定されている場合、サービスは存在しないユーザーをアプリに通知しません。Lambda 関数が同じユーザーエクスペリエンスを維持し、レイテンシーを考慮することをお勧めします。この方法では、発信者はユーザーが存在する場合と存在しない場合で異なる動作を検出することができません。 - セッション
-
ChallengeResult
要素の配列。それぞれに以下の要素が含まれます。- challengeName
-
チャレンジタイプは、
CUSTOM_CHALLENGE
、、SRP_A
、PASSWORD_VERIFIER
、SMS_MFA
、EMAIL_OTP
、、SOFTWARE_TOKEN_MFA
DEVICE_SRP_AUTH
DEVICE_PASSWORD_VERIFIER
、または のいずれかですADMIN_NO_SRP_AUTH
。認証チャレンジ定義関数が多要素認証を設定したユーザーに
PASSWORD_VERIFIER
チャレンジを発行すると、Amazon Cognito はそれをSMS_MFA
、EMAIL_OTP
、またはSOFTWARE_TOKEN_MFA
チャレンジでフォローアップします。これらは、多要素認証コードのプロンプトです。関数には、、SMS_MFA
、EMAIL_OTP
およびSOFTWARE_TOKEN_MFA
チャレンジからの入力イベントの処理を含めます。認証MFAチャレンジの定義関数でチャレンジを呼び出す必要はありません。重要
ユーザーが正常に認証され、トークンが発行されるべきかを判断するときは、常に define auth challenge 関数で
challengeName
をチェックし、予想された値と一致することを確認します。 - challengeResult
-
ユーザーが正常にチャレンジを完了した場合は
true
に、それ以外の場合はfalse
に設定します。 - challengeMetadata
-
カスタムチャレンジの名前を入力します。
challengeName
がCUSTOM_CHALLENGE
である場合にのみ使用されます。
- clientMetadata
-
認証チャレンジの定義のトリガーに指定する Lambda 関数へのカスタム入力として提供できる 1 つ、または複数のキー/値ペア。このデータを Lambda 関数に渡すには、 AdminRespondToAuthChallenge および RespondToAuthChallengeAPIオペレーションで
ClientMetadata
パラメータを使用できます。認証チャレンジ定義関数を呼び出すリクエストには、 AdminInitiateAuth および InitiateAuthAPIオペレーションの ClientMetadata パラメータに渡されたデータは含まれません。
認証チャレンジの定義のレスポンスパラメータ
レスポンスで、認証プロセスの次のステージを返すことができます。
- challengeName
-
次のチャレンジの名前を含む文字列。ユーザーに新しいチャレンジを提示する場合は、ここでチャレンジ名を指定します。
- issueTokens
-
ユーザーが認証チャレンジを十分に完了したと判断した場合、
true
に設定します。ユーザーがチャレンジを十分に満たしていない場合は、false
に設定します。 - failAuthentication
-
現在の認証プロセスを終了する場合は、
true
に設定します。現在の認証プロセスを続行するには、false
に設定します。
認証チャレンジの定義の例
この例では、認証用に一連のチャレンジを定義し、それらのチャレンジがすべて正常に完了した場合にのみトークンを発行します。