AWS CloudFront 签名 Cookie CORS 问题

Posted

技术标签:

【中文标题】AWS CloudFront 签名 Cookie CORS 问题【英文标题】:AWS CloudFront Signed Cookies CORS Issue 【发布时间】:2019-04-24 18:22:28 【问题描述】:

我在执行云端签名的 cookie 时遇到以下错误

从源访问“https://a.xyz.com/test.html”处的 XMLHttpRequest 'https://b.xyz.com' 已被 CORS 策略阻止:否 请求中存在“Access-Control-Allow-Origin”标头 资源。

我正在从 b.xyz.com(域 2)访问 a.xyz.com(域 1)的文件。 在限制查看者访问(使用签名 cookie)以进行云前端(域 1)分发之前,这工作正常。

我对具有域 1 资产的存储桶的 S3 CORS 配置是

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

我已尝试在云端行为设置中设置以下白名单标头

Access-Control-Request-Headers
Access-Control-Request-Method
Origin

但我仍然收到上述错误。

注意:如果我在新选项卡中打开文件 https://a.xyz.com/test.html,它工作正常,即已成功创建签名 cookie。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

要使 CORS 与 cookie 一起使用,您需要使用 Access-Control-Allow-Credentials

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials

另外Access-Control-Allow-Origin 不能是*,XHR 需要用withCredentials 触发

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

【讨论】:

以上是关于AWS CloudFront 签名 Cookie CORS 问题的主要内容,如果未能解决你的问题,请参考以下文章

没有密钥对(RSA 私钥)的 aws cloudfront 中的签名 cookie

如何在 Lambda 函数中使用 AWS.CloudFront.Signer

为啥使用 AWS CloudFront 时出现 CORS 客户端错误?

通过 AWS 开发工具包创建签名的 S3 和 Cloudfront URL

了解 AWS CloudFront 签名 URL

AWS CloudFront 为不同的主机(前端和后端)设置 cookie