AWS API Gateway中OPTIONS请求出现403 MissingAuthenticationTokenException问题
问题排查与解决方案
针对你遇到的AWS API Gateway OPTIONS预检请求返回403 MissingAuthenticationTokenException的问题,以下是具体排查方向和解决步骤:
1. 检查API Gateway OPTIONS方法的集成配置
- 如果你之前通过API Gateway控制台的「Enable CORS」按钮自动生成OPTIONS方法,它默认会创建Mock集成——这种情况下API Gateway会直接返回它自身配置的CORS头,不会将请求转发到你的Django后端。如果此时你的API启用了API Key要求,OPTIONS方法也会强制校验API Key,但浏览器预检请求不会携带API Key,直接触发403错误。
- 解决方式:删除自动生成的Mock OPTIONS方法,手动创建OPTIONS方法,将集成类型设置为
HTTP Proxy,指向你的Django后端地址,让请求转发到你编写的upload_image视图处理CORS逻辑。
2. 单独配置OPTIONS方法的API Key要求
- 即使你为API全局启用了API Key,也必须确保OPTIONS方法的「API Key Required」选项设为
false。浏览器的预检请求不会携带API Key,若强制校验会直接返回403,这是你遇到MissingAuthenticationTokenException的常见原因。 - 操作路径:API Gateway控制台 → 目标资源 → OPTIONS方法 → 方法请求 → 设置「API Key Required」为
false。
3. 确认API Gateway已重新部署
- 所有API Gateway的配置修改(包括方法设置、CORS、API Key规则)都需要重新部署到对应阶段(比如你的
dev阶段)才会生效。如果修改后未部署,旧的配置会继续生效,导致问题无法解决。
4. 验证路径匹配与请求转发
- 检查API Gateway的资源路径(
/dev/photos/)与Django的路由是否完全匹配(包括末尾斜杠)。若路径不匹配,OPTIONS请求无法到达你的upload_image视图,Django会返回默认404,API Gateway可能将其转换为403错误。 - 查看Django服务器日志,确认是否收到了OPTIONS请求:如果日志中没有相关记录,说明请求未成功转发到后端,问题出在API Gateway的路径或集成配置。
5. 排查WAF或其他拦截规则
- 如果你的API Gateway关联了AWS WAF,检查是否有规则拦截了OPTIONS请求,或拦截了未携带API Key的请求。
- 查看API Gateway的CloudWatch执行日志,获取更详细的错误上下文,确认是否是第三方服务拦截导致的403。
前端代码优化建议
使用FormData时,无需手动设置Content-Type: multipart/form-data,Axios会自动根据FormData生成包含boundary的正确请求头,手动设置可能导致请求格式错误:
const formData = new FormData(); formData.append("image", selectedFile); try { await axios({ method: "put", url: "https://my-api.execute-api.eu-west-2.amazonaws.com/dev/photos/", data: formData, headers: { "x-api-key": "abc123" } }); } catch (error) { console.error(error); }
内容的提问来源于stack exchange,提问作者Mohamed Hassan
相关产品推荐
相关产品推荐

