【问题标题】:Error on setting CORS header for API Gateway lambda authorizer为 API Gateway lambda 授权者设置 CORS 标头时出错
【发布时间】:2020-08-30 13:18:40
【问题描述】:

我的 API 网关授权有一个 lambda 授权方。当授权方返回 401 或 403 时,我没有在响应标头中返回 CORS。我正在使用AWS::Serverless::Api 资源,经过一些研究发现here 我需要设置GatewayResponses 以返回4XX 响应的自定义标头。

我的 Api 网关定义如下:

resApiGateway:
Type: AWS::Serverless::Api
Properties:
  StageName: !Sub "${env}"
  EndpointConfiguration: !If [IsLocal, "REGIONAL", "EDGE"]
  Cors:
    AllowMethods: "'OPTIONS,GET,POST,PUT,DELETE'"
    AllowHeaders: "'Content-Type,X-Amz-Date,Authorization'"
    AllowOrigin: "'*'"
  GatewayResponses:
    DEFAULT_4XX:
      ResponseParameters:
        "gatewayresponse.header.Access-Control-Allow-Origin": "'*'"
  ...
  ...

但我在 cfn 堆栈部署时遇到错误:

Transform AWS::Serverless-2016-10-31 failed with: Invalid Serverless Application Specification document. Number of errors found: 1. Resource with id [resApiGateway] is invalid. Invalid gateway response parameter 'gatewayresponse.header.Access-Control-Allow-Origin'

【问题讨论】:

  • 你试过this syntax?Headers:ResponseParameters
  • 太棒了,它成功了!谢谢@MikePatrick。请把它放在答案中,以便我接受。

标签: amazon-web-services aws-lambda aws-api-gateway aws-sam


【解决方案1】:

此功能随 SAM v1.11.0 发布。 release notes 有一个指向 this sample application template 的链接,用于演示该功能。

不幸的是,亚马逊自己的 SAM 文档(您链接到该文档)只会将您指向他们的 OpenAPI extension docs

这些文档似乎展示了如何配置 API Gateway 以将此功能与 OpenAPI 规范一起使用,而不是与 SAM 模板一起使用。


要在 SAM 模板中指定 GatewayResponses,请使用示例应用程序中的语法:

Resources:
  restApiGateway:
    Type: AWS::Serverless::Api
    Properties:
      GatewayResponses:
        DEFAULT_4XX:
          ResponseParameters:
            Headers:
              Access-Control-Allow-Origin: "'*'"

【讨论】:

  • 对此表示感谢!我已经找了好几个小时了!!链接的示例应用程序代码现在也是 404。我从发行说明那里结束了,但由于 404 而陷入了死胡同,直到我在这里看到您的回复,并带有一个示例 yml sn-p。
猜你喜欢
  • 2017-03-07
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 2017-06-18
  • 2019-05-30
  • 1970-01-01
  • 2017-04-13
  • 2019-07-09
相关资源
最近更新 更多