如何在 Amazon Cognito 中将 ClientMetadata 传递给 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 的短消息服务 (SMS)
  • 设备安全远程密码 (SRP)
  • 自定义身份验证质询

此外,ClientMetadata 参数增强了 Lambda 函数用户群体触发器的自定义工作流。

使用 ClientMetadata 参数的 RespondToAuthChallenge API 调用示例

在此示例中,Amazon Cognito 用户群体配置了应用客户端。后身份验证 Lambda 触发器与用户群体相关联。

名为 lambda_handlerLambda 函数会打印它收到的事件:

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

示例 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 触发器自定义用户群体工作流

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