【问题标题】:"Missing Authentication Token" for OPTIONS preflightOPTIONS 预检的“缺少身份验证令牌”
【发布时间】:2020-04-19 13:45:03
【问题描述】:

我正在使用 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 的身份验证,以及如何做到这一点?

  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 无服务器框架处理我的个人项目,并解决了 MissingAuthenticationToken 和 CQRS 问题。我确实修改了 serverless.yml 和响应标头。我希望这会有所帮助,ijianhuang.wordpress.com/2019/12/31/…

标签: aws-lambda axios aws-api-gateway serverless-framework serverless


【解决方案1】:

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

【讨论】:

  • 感谢@Michael-O,我设法通过为 OPTIONS 创建一个端点来解决这个问题,该端点指向 deleteTodo 的相同 lambda,远非理想,仍在为此研究无服务器框架,如果你知道,请告诉我有更多见解!
  • @martin,请注意,预检选项请求不是常规选项请求。你必须在这里区分。查看 Tomcat 中的过滤器,您会注意到。如果其他地方有解决方案,最好不要尝试解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
  • 2020-08-27
  • 2017-02-24
  • 2019-03-25
  • 2020-09-18
  • 2018-11-20
  • 2021-08-28
相关资源
最近更新 更多