Amazon Cognito の Lambda トリガーにClientMetadataを渡すにはどうすればよいですか?

所要時間1分
0

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 トリガーによるユーザープールのワークフローのカスタマイズ

AWS公式
AWS公式更新しました 1年前