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 客户端错误?