首页 > 解决方案 > 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":"缺少身份验证令牌"}

在这种情况下,最佳实践是什么?

  1. 我是否应该强制/修复 Axios 客户端在 OPTIONS 中发送 Auth 令牌,以及如何做到这一点?

  2. 或者我应该在 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

标签: aws-lambdaaxiosaws-api-gatewayserverless-frameworkserverless

解决方案


不,你不能。我对 Axios 也有同样的问题。所有预检请求必须是匿名的。另请参阅Tomcat 中的这张票。规范也需要它,并且无论您做什么,浏览器都不会发送任何身份验证标头。


推荐阅读