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

无法在AWS API Gateway HTTP代理请求头中传递$context变量

在AWS API Gateway的请求头中传递Cognito用户名的解决方案

我之前也碰到过类似的问题——请求体里能正常拿到用户名字段,但请求头里就是取不到,大概率是映射语法或者部署环节的小疏漏,给你梳理几个关键的排查和解决步骤:


1. 检查请求头映射的语法是否正确

API Gateway对请求头的映射表达式要求和请求体略有不同,尤其是当claim名称里包含特殊字符(比如cognito:username里的冒号)时,必须用括号加引号的方式取值:
在请求头的映射值里,直接填写:

$context.authorizer.claims['cognito:username']

或者也可以用get方法的写法:

$context.authorizer.claims.get("cognito:username")

注意不要给整个表达式加引号,否则API Gateway会把它当成静态字符串处理,这是很多人容易犯的低级错误!

2. 正确配置并添加请求头映射

具体操作步骤:

  • 打开AWS API Gateway控制台,找到你的目标API和对应的资源方法
  • 切换到集成请求标签页
  • 滚动到HTTP头区域,点击添加头
  • 在名称里填你想要的请求头键(比如X-Cognito-Username)
  • 映射来自选择映射表达式,然后在值里填入上面的正确表达式
  • 保存修改

3. 务必重新部署API

这一步超级容易被忽略!修改映射配置后,必须重新将API部署到对应的阶段,否则所有的配置修改都不会生效。操作:

  • 在API Gateway控制台的左侧菜单点击部署API
  • 选择你要部署到的阶段,点击部署

4. 验证授权器是否返回了目标Claim

如果上面的步骤都做了还是不行,那得确认你的Cognito授权器确实返回了cognito:username这个claim:

  • 用API Gateway的测试功能调用你的方法,在测试结果里查看集成请求的日志,检查$context.authorizer.claims的结构,确认里面包含cognito:username字段
  • 或者检查Cognito用户池的应用客户端设置,确保没有限制cognito:username这个claim的传递

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:49:22