Amazon Cognito API を使用してクライアントのメタデータを AWS Lambda トリガーに渡す認証ワークフローを構築したいと考えています。
解像度
Amazon Cognito でユーザー認証を開始するために ClientMetadataパラメータを指定して InitiateAuthAPI を呼び出すと、クライアントメタデータは次の Lambda トリガーにのみ渡されます:
それに比べて、次の Lambda トリガーにclientMetadataを組み込むには、RespondToAuthChallenge API を呼び出す必要があります:
以下のいずれかの認証チャレンジに応答するには、RespondToAuthChallenge API 呼び出しにClientMetadata パラメーターを含めてください:
- 時間ベースのワンタイムパスワード (TOTP) 多要素認証 (MFA)
- MFA 用Short Message Service (SMS)
- Device Secure Remote Password (SRP)
- カスタム認証チャレンジ
さらに、ClientMetadata パラメータは Lambda 関数ユーザープールトリガーのカスタムワークフローを強化します。
例:ClientMetadataパラメーターを使用した AuthChallenge API 呼び出しへの応答
この例では、Amazon Cognito ユーザープールはアプリケーションクライアントで設定されています。認証後の Lambda トリガーはユーザープールに関連付けられます。
lambda\ _handler という名前の** Lambda 関数は、**受け取ったイベントを出力します:
import json
def lambda_handler(event, context):
# TODO implement
print(event)
return event
**重要:**Amazon CloudWatch に安全なデータやシークレットが公開されないように、本番システムでのロギングは慎重に行ってください。
ユーザープールにテストユーザーが作成されます。次に、MFA 用の SMS が設定されます。
InitiateAuth API 呼び出しリクエストの例では、ユーザーのサインインが開始されます:
aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=test,PASSWORD=Password@123 --client-id 1abcd2efgh34ij5klmnopq456r
認証の開始 API 呼び出しレスポンスの例は次のとおりです:
{
"ChallengeName": "SMS_MFA",
"Session": "1AbcDEfgXXXXX",
"ChallengeParameters": {
"CODE_DELIVERY_DELIVERY_MEDIUM": "SMS",
"CODE_DELIVERY_DESTINATION": "+********1234",
"USER_ID_FOR_SRP": "test"
}
}
RespondToAuthChallenge API コールリクエストの例では MFA コードが送信され、ClientMetadata パラメーターには渡す必要のある追加情報が含まれます:
aws cognito-idp respond-to-auth-challenge --client-id 9zyxw8vuts76rq5ponmlkj432i --challenge-name SMS_MFA --session "9ZyxWVutXXXXX" --challenge-responses USERNAME=test,SMS_MFA_CODE=654321 --client-metadata KeyName1='string',KeyName2='string'
Auth Challenge API 呼び出しレスポンスの例は次のとおりです:
{
"ChallengeParameters": {},
"AuthenticationResult": {
"AccessToken": "abXXXX",
"ExpiresIn": 3600,
"TokenType": "Bearer",
"RefreshToken": "abXX",
"IdToken": "abXXX"
}
}
ユーザーが認証に成功し、Amazon Cognito からトークンを受け取ると、認証後の Lambda トリガーが呼び出されます。
認証後の Lambda トリガーの結果は、CloudWatch コンソールのログイベントで確認できます。イベント本文でClientMetadata パラメータの詳細を探してください。
関連情報
カスタム認証チャレンジ Lambda トリガー
Lambda トリガーによるユーザープールのワークフローのカスタマイズ