我想要使用 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 觸發程序與使用者集區相關聯。
]( _handler 的[Lambda 函數**打印它收到的事件:
import json
def lambda_handler(event, context):
# TODO implement
print(event)
return event
**重要事項:**在生產系統中小心使用記錄功能,以避免在 Amazon CloudWatch 中暴露任何安全資料或機密。
測試使用者會在使用者集區中建立。然後,已設定 MFA]() 的[簡訊。
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"
}
}
使用者成功驗證並]( Amazon Cognito 接收[令牌後,便會叫用身份驗證後 Lambda 觸發程序。
在 CloudWatch 主控台的日誌事件下,找到驗證後 Lambda 觸發器結果。在事件主體中尋找 ClientMetadata 參數詳細資料。
相關資訊
自訂驗證挑戰 Lambda 觸發
使用 Lambda 觸發器自訂使用者集區