OPTIONS飞行前的“缺少身份验证令牌”

时间:2019-12-30 21:43:52

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

我正在使用AWS提供的API网关,并且具有用于删除方法的无服务器(框架)终结点。客户端正在使用Axios,并且配置如下:

  await Axios.delete(`${apiEndpoint}/todos/${todoId}`, {
    withCredentials: true,
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${idToken}`
    }
  }).then..

此删除请求失败(403)显然是因为OPTIONS预检失败:

  

{“消息”:“缺少身份验证令牌”}

在这种情况下,最佳做法是什么?

  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明确定义一个入口点,这不行。

Framework Core: 1.60.1
Plugin: 3.2.6
SDK: 2.2.1
Components Core: 1.1.2
Components CLI: 1.4.0

1 个答案:

答案 0 :(得分:1)

不,您不能。我对Axios有同样的问题。所有的斗志请求都必须是匿名的。另请参见Tomcat中的this ticket。规范是否需要它,无论您做什么,浏览器都不会发送任何身份验证标头。