如何为 AWS API Gateway 自定义授权方配置 CORS?

Posted

技术标签:

【中文标题】如何为 AWS API Gateway 自定义授权方配置 CORS?【英文标题】:How to configure CORS for an AWS API Gateway Custom Authorizer? 【发布时间】:2018-03-08 11:16:10 【问题描述】:

我有一个由 API Gateway 和 Lambda 提供支持的 API,它使用自定义授权方。

对于成功的请求,它会通过授权方,然后我的 Lambda 可以毫无问题地返回带有 CORS 标头的正确响应。

但是,对于不成功的授权(例如无效令牌),我没有得到 CORS 标头,这会导致我的客户端应用程序(使用 fetch API)抛出。

如何为使用自定义授权方的 API 设置 CORS?

【问题讨论】:

【参考方案1】:

根据this answer 和this AWS documentation page,我能够弄清楚如何解决它。

解决方法是在我的serverless.yml中添加以下内容:

resources:
  Resources:
    AuthorizerApiGatewayResponse:
      Type: "AWS::ApiGateway::GatewayResponse"
      Properties:
        ResponseParameters:
          "gatewayresponse.header.Access-Control-Allow-Origin": "'*'"
        ResponseType: UNAUTHORIZED
        RestApiId: "Ref" : "ApiGatewayRestApi"
        StatusCode: "401"

【讨论】:

如果我也使用 withCredentials(不允许 *),但有多个来源,您知道处理此问题的适当方法是什么吗? 其实通过Serverless博客找到了更好的解决方案serverless.com/blog/cors-api-gateway-survival-guide/…

以上是关于如何为 AWS API Gateway 自定义授权方配置 CORS?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 AWS API Gateway Custom Authorizer 提供 Lambda 权限?

未调用 AWS API Gateway 自定义授权方

AWS API Gateway 自定义授权方有用吗?

AWS API Gateway 自定义授权方给予例外

API 创新不会触发 AWS API Gateway 的基于自定义请求的 lambda 授权方

AWS API Gateway 身份验证(Cognito 与自定义授权者)