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

调用AWS Cognito保护的API端点返回401未授权问题

Cognito + API Gateway 返回401问题排查与修复

你遇到的「控制台授权器测试token有效、实际调用返回401」是Cognito集成API Gateway的典型问题,核心原因是控制台测试逻辑和实际API请求的校验规则存在差异,按以下优先级排查即可:

最高概率诱因:Authorization头格式不符合规范

API Gateway的Cognito用户池授权器对Authorization头的格式有严格要求:

  • 鉴权前缀必须是大写开头的Bearer,你当前代码里写的小写bearer会被直接判定为无效头,触发401。而控制台测试授权器时,输入框只需要传入纯token内容,不需要手动加前缀,所以不会触发这个格式校验,表现为测试通过、实际调用失败。
  • Bearer和token值之间只能保留1个半角空格,token前后不能拼接多余的空格、换行符。

修复方式:将请求头设置改为

headers: {
  "Authorization": `Bearer ${token.trim()}`
}

次高概率诱因:Token类型与授权器配置不匹配

你当前代码中取的是ID Token:result.getIdToken().getJwtToken(),需要核对API Gateway侧Cognito授权器的配置:

  • 如果授权器开启了「仅校验访问令牌(Access Token)」的配置,合法的ID Token也会被拒绝
  • 控制台测试时不会校验你配置的令牌类型限制,只要是该用户池签发的合法JWT(签名、有效期、受众匹配)就会返回200,和实际请求的校验逻辑不一致

修复方式:

  • 如果授权器要求Access Token,将取token的逻辑改为result.getAccessToken().getJwtToken()
  • 如果授权器配置为接受ID Token,保持现有取token逻辑即可,不要混用两类token

其他常见排查点

  • 检查aws-api-gateway-client是否覆写了Authorization头:如果初始化客户端时传入了AK/SK等SigV4签名参数,客户端会自动生成签名格式的Authorization头(以AWS4-HMAC-SHA256开头),覆盖你手动设置的Bearer token。可以打印实际发出的请求头确认最终值,不需要SigV4签名的话初始化时不要传入签名相关参数即可。
  • 检查跨域预检请求配置:如果是跨域调用,浏览器会先发送OPTIONS预检请求,若OPTIONS方法绑定了Cognito授权器,预检请求不会携带Authorization头,会直接返回401,导致后续实际请求被浏览器拦截。需要给OPTIONS方法设置为「无认证」,同时正确配置CORS响应头,允许Authorization头被跨域携带。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:57:38