API Gateway授权问题:网站调用返回401 Unauthorized寻求解决方案
解决方案建议
1. 排查授权器(Authorizer)的配置与前端请求匹配问题
- 确认授权器类型:如果是Lambda授权器,检查前端请求是否正确携带了授权器要求的凭证(比如JWT Token放在
Authorization头,或自定义请求头),控制台测试会跳过凭证校验,前端必须严格按授权器规则传参。 - 验证授权器返回的IAM策略:在CloudWatch日志里查看授权器Lambda的执行日志,确认返回的策略是否允许当前请求的API资源(格式类似
arn:aws:execute-api:region:account-id:api-id/stage/method/resource),资源路径不匹配会直接返回401。 - 清除授权器缓存:若授权器开启了缓存,之前的错误策略可能被缓存,可临时关闭缓存或手动刷新后再测试。
2. 检查API Key的完整配置链路
- 绑定API Key到Usage Plan:创建API Key后,必须将其关联到对应的Usage Plan,且Usage Plan要绑定你的API Gateway阶段(Stage)。
- 前端请求携带
x-api-key头:确保前端POST请求的请求头包含x-api-key: 你的API Key值,注意头名称为小写的x-api-key,不要写错。 - 启用方法的API Key校验:在API Gateway对应POST方法的设置里,确认API Key Required选项设为
true,否则API Key配置不会生效。
3. 处理跨域(CORS)预检请求的授权问题
- OPTIONS方法无需授权:前端跨域POST请求会先发送OPTIONS预检请求,该请求不会携带授权凭证,必须确保API Gateway的OPTIONS方法未绑定任何授权器,且API Key Required设为
false,否则预检请求返回401会导致后续POST请求无法执行。 - 配置正确的CORS响应头:在API Gateway的CORS设置里,确保允许的请求头包含你使用的授权头(比如
Authorization、x-api-key),否则浏览器会拦截响应。
4. 验证权限策略的正确性
- 检查Lambda执行角色:确认你的Lambda函数执行角色拥有
lambda:InvokeFunction权限,且API Gateway的服务角色(若有)有权限调用该Lambda。 - 授权器Lambda的角色权限:如果用的是Lambda授权器,其执行角色需要
logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents权限,确保能生成日志用于排查。
5. 确认测试与生产端点的一致性
- 检查前端请求的API端点:确保前端调用的是API Gateway部署后的正式端点(格式类似
https://api-id.execute-api.region.amazonaws.com/stage),而非控制台测试用的临时端点,两者配置可能存在差异。
内容的提问来源于stack exchange,提问作者By1
相关产品推荐
相关产品推荐

