You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Cognito客户端凭证流中预令牌生成Lambda未触发问题排查

AWS Cognito预令牌生成Lambda在client_credentials授权流中未触发的问题解答

是否支持client_credentials授权流?

Amazon Cognito的预令牌生成Lambda触发器完全支持client_credentials授权类型,但必须使用V2_0版本的触发器事件,你当前配置的版本符合要求,核心功能是可用的。

排查步骤

  • 确认触发器事件版本:再次检查用户池的预令牌生成触发器配置,确保事件版本确实是V2_0——V1版本仅支持用户主导的授权流(如authorization code、password等),不兼容client_credentials流。
  • 验证应用客户端配置:
    • 确认目标应用客户端已启用client_credentials授权类型;
    • 检查客户端未被禁用,且属于当前配置的用户池;
    • 调用授权接口时,确保使用了正确的客户端ID和密钥(若客户端配置了密钥)。
  • 检查Lambda权限策略:
    • 确认Lambda的信任策略已允许Cognito服务(cognito-idp.amazonaws.com)调用该函数,且绑定了正确的用户池ARN作为条件;
    • 权限策略中需包含lambda:InvokeFunction动作,且资源指向你的Lambda函数ARN,示例策略如下:
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "cognito-idp.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:你的区域:账号ID:function:你的Lambda函数名",
            "Condition": {
              "StringEquals": {
                "AWS:SourceArn": "arn:aws:cognito-idp:你的区域:账号ID:userpool:你的用户池ID"
              }
            }
          }
        ]
      }
      
  • 检查Lambda代码逻辑:
    • client_credentials流触发时,事件的triggerSource字段为TokenGeneration_ClientCredentials,确保你的函数没有仅处理用户相关的触发源(如TokenGeneration_Authentication);
    • 确认函数正确修改event['response']['claimsOverrideDetails']来添加自定义声明,示例代码(Python):
      def lambda_handler(event, context):
          if event["triggerSource"] == "TokenGeneration_ClientCredentials":
              event["response"]["claimsOverrideDetails"] = {
                  "claimsToAddOrOverride": {
                      "custom_claim_key": "custom_claim_value"
                  }
              }
          return event
      
  • 查看CloudTrail日志:在AWS CloudTrail中搜索InitiateAuth或Token相关事件,检查是否存在Lambda调用失败的错误信息(如权限不足、函数执行超时等)。
  • 手动测试Lambda函数:构造模拟的client_credentials流触发事件(参考下方结构),在Lambda控制台测试函数是否能正常返回包含自定义声明的响应:
    {
      "version": "V2_0",
      "triggerSource": "TokenGeneration_ClientCredentials",
      "region": "你的区域",
      "userPoolId": "你的用户池ID",
      "clientId": "你的客户端ID",
      "response": {
        "claimsOverrideDetails": {}
      }
    }
    
  • 确认触发器关联:进入用户池的「触发器」页面,再次确认预令牌生成触发器已正确关联到你的目标Lambda函数,无配置丢失情况。

内容的提问来源于stack exchange,提问作者js-kyle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:52:54