使用access token测试Cognito Authorizer失败,寻求单独测试方案
一、先确认测试请求的格式是否合规
API Gateway的Cognito Token Authorizer单独测试时,必须严格按要求传参:
- 请求头必须带
Authorization,值为Bearer <你的access_token>(注意Bearer和token之间有空格,少了空格直接会验证失败) - 如果你的Authorizer配置了自定义验证规则(比如检查特定scope、用户自定义属性),要确保测试用的token包含这些必填内容——调用API时可能集成环节自动兼容了部分验证,才会通过
二、核对测试配置的细节
- 测试时选对测试类型:如果是Token型Authorizer,必须选“Token”模式,别选错成“Request”模式
- 确认测试用的token是未过期的,且属于Authorizer关联的Cognito用户池和客户端ID
- 检查Cognito应用客户端设置:确保该客户端允许生成access token,且token的
aud(受众)值和Authorizer配置的客户端ID完全一致
三、通过日志定位失败原因
- 先确保API Gateway已经开启了CloudWatch日志记录(在API的“阶段设置”里配置)
- 进入Authorizer页面点击“测试”,输入token执行测试
- 测试失败后,去CloudWatch的API Gateway日志组里找对应记录:
- 日志里的
errorMessage会直接说明失败原因,比如Invalid token signature、Missing required scope、Audience does not match等 - 重点看token验证的关键节点,比如签名是否有效、issuer是否匹配
- 日志里的
四、手动校验token的有效性
用本地的jwt命令行工具或者JWT解码工具解析access token,检查以下核心字段:
exp:确认token未过期(时间戳转成日期后要晚于当前时间)iss:必须和用户池的issuer URL一致,格式为https://cognito-idp.<区域>.amazonaws.com/<用户池ID>aud:必须等于Authorizer配置的Cognito客户端ID- 如果Authorizer要求特定scope,检查
scope字段是否包含所需的权限值
五、对比API调用和单独测试的差异
调用API能通过但单独测试失败,大概率是这几个差异点:
- API Gateway的阶段变量或集成请求对token做了额外处理(比如自动补充缺失的字段),但单独测试Authorizer时没有这些逻辑
- Authorizer开启了缓存,之前的有效token缓存未过期,导致API调用复用缓存通过,但新测试的token不符合要求
- 测试用的token和API调用时的token不是同一个,仔细核对两个token的解码内容
内容的提问来源于stack exchange,提问作者Mark P
相关产品推荐
相关产品推荐

