【问题标题】:CloudFront CORS failing for preflight/options callsCloudFront CORS 无法进行预检/选项调用
【发布时间】:2022-06-29 20:43:00
【问题描述】:

我已将 S3 配置为只能通过 CloudFront 访问并使用 lambda 保护。问题是由于预检调用失败,我无法从 SPA 访问文件。当使用 Postman GET 调用进行测试时,会返回一个正确设置了 CORS 标头的对象,但 OPTIONS 返回 403。

我的配置: S3 CORS

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "DELETE",
            "GET"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [],
        "MaxAgeSeconds": 3000
    }
]

CloudFront 配置

Lambda@Edge

我还有一个简单的 lambda,它检查请求中包含的 JWT 令牌。 lambda 配置:

结果:

邮递员获取:

邮递员选项:

消息:“CORSResponse:不允许此 CORS 请求。这通常是因为资源的 CORS 规范未将 Origin、请求方法/Access-Control-Request-Method 或 Access-Control-Request-Headers 的评估列入白名单。”

我尝试了许多混合和匹配缓存策略、源请求策略和响应标头策略的变体,来自不同教程和其他堆栈溢出帖子,但似乎没有任何帮助。

我将非常感谢您的帮助,因为我在一段时间内一直在努力解决此问题,谢谢!

【问题讨论】:

  • 想知道你是否解决了这个问题?

标签: amazon-web-services amazon-s3 cors amazon-cloudfront http-options-method


【解决方案1】:

CloudFront 设置正确,问题应该与您的 Lambda@Edge 有关:请注意它在调用 OPTIONS 方法时也会触发
可能是您的 lambda 在由 OPTIONS API 调用触发时也尝试验证 JWT 令牌,并且由于请求中不包含 JWT 令牌,因此它返回 403 错误。我建议您检查 CloudWatch 日志 以验证这一点并处理 Lambda@Edge 中的 OPTIONS 方法执行直通:响应标头策略将添加带有预检标头的 CORS (你已经正确设置了)。

【讨论】:

    猜你喜欢
    • 2013-04-12
    • 2019-10-21
    • 2017-05-18
    • 2016-03-22
    • 2018-12-29
    • 2015-11-16
    • 2014-02-18
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多