aws-lambda - OPTIONS 预检的“缺少身份验证令牌”
问题描述
我正在使用 AWS 提供的 API Gateway,并且我有一个用于删除方法的无服务器(框架)端点。客户端使用的是axios,配置如下:
await Axios.delete(`${apiEndpoint}/todos/${todoId}`, {
withCredentials: true,
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${idToken}`
}
}).then..
此删除请求失败(403)显然是因为 OPTIONS 预检失败:
{"message":"缺少身份验证令牌"}
在这种情况下,最佳实践是什么?
我是否应该强制/修复 Axios 客户端在 OPTIONS 中发送 Auth 令牌,以及如何做到这一点?
或者我应该在 aws 网关端点中为 OPTIONS 禁用 Auth,以及如何做到这一点?
DeleteTodo:
handler: src/lambda/http/deleteTodo.handler
events:
- http:
method: delete
path: todos/{todoId}
authorizer: Auth
iamRoleStatements:
编辑:添加cors: true没有在 AWS Gateway 上为 todos/{todoId} 创建 OPTIONS,也许这是无服务器框架的错误?(我必须明确地为 OPTIONS 定义一个端点,这是不行的。
Framework Core: 1.60.1
Plugin: 3.2.6
SDK: 2.2.1
Components Core: 1.1.2
Components CLI: 1.4.0
解决方案
不,你不能。我对 Axios 也有同样的问题。所有预检请求必须是匿名的。另请参阅Tomcat 中的这张票。规范也需要它,并且无论您做什么,浏览器都不会发送任何身份验证标头。
推荐阅读
- vba - 专家 - 表单打开方式不同于设计视图与 MS Access 对象列表
- bash - 为什么在 bash (3.2) 中拆分由换行符终止的字符串时需要 read -rd ''?
- ios - 为什么我的标签在用户退出并返回应用程序后没有显示任何文本?
- python-3.x - 在 Python 3.x 中使用 Struct.unpack 的更简洁方式?
- javascript - React 中的类
- java - Java处理优先级队列中的重复元素
- java - 如何将 XMPP 服务域作为字符串 Smack 4
- azure-application-insights - Azure 应用程序洞察——基于 ResultCode 的可用性百分比
- javascript - 如何从 jquery 的列表中删除元素“this”?
- php - 正则表达式 - PHP - 匹配多级 URL 路径,如果开头后跟某个路径或没有别的