使用JWT Token通过API Gateway调用始终返回未授权问题排查
问题分析与解决方案
你遇到的核心问题是API Gateway未正确转发authorization请求头,导致后端鉴权中间件检测不到该头信息,返回unauthorized access! no headers!错误。以下是具体排查和解决步骤:
1. 检查API Gateway集成请求的头映射配置
API Gateway默认不会自动转发自定义请求头,即便你在CORS配置中允许了该头,也需要在集成请求中明确配置映射规则:
- 登录AWS控制台进入API Gateway,找到对应API和目标资源(如
/fetch-general-news) - 切换至集成请求标签,定位到HTTP头区域
- 添加一条映射规则:
- 名称:填写
authorization(与后端中间件读取的req.headers.authorization一致,Node.js会自动将请求头转为小写) - 映射值:输入
method.request.header.authorization
- 名称:填写
2. 重新部署API到对应阶段
修改API Gateway配置后,必须重新部署到你的目标阶段(如prod、dev),否则新的头映射配置不会生效。部署操作可通过API Gateway控制台的部署API选项完成。
3. 验证前端请求头大小写(可选)
尽管HTTP协议规定请求头大小写不敏感,但部分场景下API Gateway对大小写有严格要求,可尝试将前端请求头的键改为大写:
const headers = { Accept: 'application/json', 'Content-Type': 'multipart/form-data', Authorization: `JWT ${token}`, // 改为Authorization };
4. 修复后端中间件笔误(非当前问题,但需注意)
你的中间件代码存在一处错误:catch块最后一行的res.res.json应改为res.json,否则会触发内部服务器错误:
// 原错误代码 res.res.json({ success: false, message: 'Internal server error!' }); // 修正后 res.json({ success: false, message: 'Internal server error!' });
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

