首页 > 解决方案 > SAM 应用程序部署提供预检错误,但如果我在 aws apigateway 控制台中创建 OPTIONS 方法,我的预检通过

问题描述

我正在使用 SAM 在 cloudformation 中创建 API。

问题: 在我的 SAM 应用程序模板中,我应该在哪里添加“X-Requested-With”标头?如何编辑我的代码以使预检成功而无需进入 AWS 控制台?

问题: 我正在处理我的预检请求,当我部署我的 SAM 应用程序时,我在邮递员中得到 403 FORBIDDEN,当我转到 AWS 控制台时,标题“X-Requested-With”不存在。

如果我尝试在控制台中添加“X-Requested-With”标头,它仍然会给出错误,但是如果我在控制台中删除 OPTIONS 方法并根据(https://enable )从头开始创建 OPTIONS 方法-cors.org/server_awsapigateway.html它有效,我在 postman 中得到 200 OK在此处输入图像描述

在此处输入图像描述

代码:

模板.yaml

Globals:
  Function:
    Timeout: 10
  Api:
    Cors:
      AllowMethods: "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'"
      AllowHeaders: "'Content-Type,X-Amz-Date,X-Amz-Security-Token,Authorization,X-Api-Key,X-Requested-With,Accept,Access-Control-Allow-Methods,Access-Control-Allow-Origin,Access-Control-Allow-Headers'"
      AllowOrigin: "'*'"

Resources:
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: Prod
      Auth:
        ApiKeyRequired: true

 MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: mypath/
      Handler: app.lambdaHandler
      Runtime: nodejs12.x
      Events:
        KrySeisoen:
          Type: Api
          Properties:
            RestApiId: !Ref MyApi
            Path: /mypath
            Method: get
      Policies:
        - ...
      VpcConfig:
        SecurityGroupIds:
          - ...
        SubnetIds:
          - ...

标签: corsamazon-cloudformationaws-api-gatewayaws-serverlesssam

解决方案


所以我叫错了树。

我遇到的问题不在于“X-Requested-With”标头,而是我的 SAM 应用程序将所有方法的 ApiKeyRequired 设置为 true 的事实。

我所要做的就是将所有选项方法的 ApiKeyRequired 设置为 false。

这是另一个问题的链接,其中包含我的问题的解决方案。 预检响应 403 被禁止。如何在没有 x-api-key 的情况下允许选项方法?


推荐阅读