AWS CloudFront签名的Cookie CORS问题

时间:2018-11-22 05:53:15

标签: javascript ajax amazon-web-services amazon-s3 cors

我在Cloudfront签名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>

我尝试在Cloudfront行为设置中设置以下白名单标题

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

但是我仍然遇到上述错误。

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

我该如何解决?

1 个答案:

答案 0 :(得分:0)

要使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