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

如何配置API Gateway模板以传递完整$context.authorizer.claims至Lambda函数

解决Cognito完整Claims对象传递到Lambda的问题

我之前也踩过这个坑!API Gateway的映射模板里直接引用整个claims对象确实会出问题,原因是Velocity模板处理对象的逻辑和单个属性不一样。

  • 问题根源:当你写"claims": "$context.authorizer.claims"时,Velocity会调用这个对象的toString()方法,而Cognito的authorizer claims对象的toString返回的并不是合法的JSON格式字符串,所以最终传到Lambda的就成了空内容。

  • 正确的映射模板写法:
    你得用API Gateway提供的$util工具类把整个claims对象序列化为JSON字符串,模板应该这么写:

    {
      "claims": $util.escapeJavaScript($context.authorizer.claims)
    }
    

    注意这里别给$util.escapeJavaScript(...)加引号,因为它输出的已经是转义后的JSON对象,直接放在键值对里就能被解析成合法的JSON结构。

  • 验证方法:
    部署模板后,在Lambda里打印event参数就能看到完整的claims对象了。比如Node.js的Lambda可以这么写:

    exports.handler = async (event) => {
      console.log("完整Claims对象:", event.claims);
      // 你的业务逻辑
      return { statusCode: 200 };
    };
    
  • 额外小提示:
    如果claims里有特殊字符(比如邮箱里的加号、特殊符号),$util.escapeJavaScript()会自动帮你转义,避免出现JSON格式错误,比手动逐个拼接属性靠谱多了。

内容的提问来源于stack exchange,提问作者Mehran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:32:08