如何將 ClientMetadata 傳遞給 Amazon Cognito 中的 Lambda 觸發器?

2 分的閱讀內容
0

我想要使用 Amazon Cognito API 建立身份驗證工作流程,以將用戶端中繼資料傳遞至 AWS Lambda 觸發程序。

解決方案

當您使用 ClientMetadata參數調用InitiateAuth API 以在 Amazon Cognito 中初始化使用者身份驗證時,ClientMetadata 只會傳遞給下列 Lambda 觸發程序:

相較之下,您必須調用RespondToAuthChallenge API,在這些 Lambda 觸發程序中包含 ClientMetadata:

RespondToAuthChallenge API 調用中包含 ClientMetadata參數,以回應下列任何一項驗證挑戰:

  • 以時間為基礎的一次性密碼 (TOTP)多重要素驗證 (MFA)
  • MFA 短訊服務
  • 裝置安全遠端密碼 (SRP)
  • 自訂驗證挑戰

此外,ClientMetadata參數可增強 Lambda 函數使用者集區觸發的自訂工作流程。

RespondToAuthChallenge 調用 ClientMetadata 參數的範例

在此範例中,Amazon Cognito 使用者集區是使用應用程式用戶端設定的。驗證後 Lambda 觸發程序與使用者集區相關聯。

](https://docs.aws.amazon.com/lambda/latest/dg/python-handler.html#python-example)名為lambda\ _handler 的[Lambda 函數打印它收到的事件:

import json

def lambda_handler(event, context):
# TODO implement
print(event)
return event

**重要事項:**在生產系統中小心使用記錄功能,以避免在 Amazon CloudWatch 中暴露任何安全資料或機密。

測試使用者會在使用者集區中建立。然後,已設定 MFA](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa-sms-text-message.html) 的[簡訊。

InitiateAuth API 調用請求啟動用戶登錄的範例:

aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=test,PASSWORD=Password@123 --client-id 1abcd2efgh34ij5klmnopq456r

InitiateAuth 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'

範例RespondToAuthChallenge API 調用回應:

{
  "ChallengeParameters": {},
  "AuthenticationResult": {
    "AccessToken": "abXXXX",
    "ExpiresIn": 3600,
    "TokenType": "Bearer",
    "RefreshToken": "abXX",
    "IdToken": "abXXX"
  }
}

使用者成功驗證並](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html)從 Amazon Cognito 接收[令牌後,便會叫用身份驗證後 Lambda 觸發程序

在 CloudWatch 主控台的日誌事件下,找到驗證後 Lambda 觸發器結果。在事件主體中尋找 ClientMetadata 參數詳細資料。

相關資訊

自訂驗證挑戰 Lambda 觸發

使用 Lambda 觸發器自訂使用者集區

AWS 官方
AWS 官方已更新 1 年前