AWS API Gateway搭配JWT授权后请求返回400 Bad Request错误咨询
问题排查及解决方案
- 首先核对API Gateway授权器的令牌来源配置
你当前请求的授权头命名为authorizationToken,需要确认你在AWS控制台配置JWT授权器时,「身份来源」设置的头名称完全和你传的一致,常见默认配置为Authorization,如果两边名称不匹配,授权器无法正常读取令牌就会返回400错误。 - 移除GET请求中多余的
Content-Type头
GET请求不存在请求体,你当前携带的'Content-Type': 'application/json'属于多余配置,部分API Gateway规则会对不符合请求方法的请求头做校验,直接移除该头即可:
return await fetch(GET_CUSTOMERS_URI, { method: 'GET', mode: 'cors', cache: 'no-cache', credentials: 'same-origin', headers: { 'authorizationToken': 'Bearer ' + token }, redirect: 'follow', referrerPolicy: 'no-referrer', })
- 检查CORS及预检请求配置
你当前使用跨域模式请求,浏览器会先发送OPTIONS预检请求:- 确认API Gateway的OPTIONS方法没有绑定JWT授权器(预检请求不会携带授权头,绑定授权器会直接被拦截)
- 确认API Gateway的CORS配置中,已经把
authorizationToken添加到允许的请求头列表中,否则浏览器会拒绝发送带自定义授权头的实际请求
- 验证令牌有效性与请求路径匹配规则
- 从浏览器开发者工具的网络面板中,复制实际请求携带的完整
authorizationToken头值,放到AWS控制台授权器的测试界面中验证,确认是否能正常返回允许策略,排除令牌拼接错误、过期、格式错误问题 - 如果你的请求路径带有查询参数,需要将授权策略中的Resource字段修改为带通配符的格式,避免路径匹配失败:
- 从浏览器开发者工具的网络面板中,复制实际请求携带的完整
{ "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Allow", "Resource": "arn:aws:execute-api:us-west-2:<account id>:<api id>/<stage-name>/GET/customers*" } ] }
内容的提问来源于stack exchange,提问作者Himanshu Kumar
相关产品推荐
相关产品推荐

