Amazon web services CloudFront上子域之间的签名Cookie

Amazon web services CloudFront上子域之间的签名Cookie,amazon-web-services,cookies,amazon-cloudfront,Amazon Web Services,Cookies,Amazon Cloudfront,在CloudFront配置中设置cookie(子域到父域)时遇到问题: S3 bucket使用CloudFront分发服务于静态站点。CNAME:example.com 带有自定义域的API网关API:API.example.com 带有CloudFront发行版的S3 bucket,其中包含CNAME:files.example.com example.com上的web应用程序联系api.example.com上的lambda代理获取方法。此函数除其他外,还返回带有由AWS.CloudFron

在CloudFront配置中设置cookie(子域到父域)时遇到问题:

  • S3 bucket使用CloudFront分发服务于静态站点。CNAME:
    example.com
  • 带有自定义域的API网关API:
    API.example.com
  • 带有CloudFront发行版的S3 bucket,其中包含CNAME:
    files.example.com
  • example.com
    上的web应用程序联系
    api.example.com
    上的lambda代理获取方法。此函数除其他外,还返回带有由AWS.CloudFront.Signer.getSignedCookies()生成的值的标题。

    这些将与响应一起发送到客户端,但由于某些原因,GET请求不会发送到
    files.example.com
    上的S3存储桶

    我不确定问题是在于cookie的设置还是发送:通过查看chrome开发工具中的应用程序选项卡,似乎cookie不在那里。但是,在“网络”选项卡中,Cookie确实与请求一起发送到
    api.example.com
    (但与请求一起发送到
    files.example.com


    据我所知,根据域cookie策略,配置应该可以工作(子域正在尝试设置一个具有父域的cookie,该父域下是父域的另一个子域,应该接收cookie)。这种行为还有其他直接的嫌疑犯吗

    您想使用cookie域
    .example.com
    而不是
    example.com
    。前导的
    也允许子域访问cookie


    您还需要确保Cookie在CloudFront行为中被转发到源站。

    您完全正确,域属性中缺少
    。不幸的是,行为没有改变,所以我只是将其添加到问题中。所有现代浏览器都尊重较新的规范,并且会忽略任何前导点,@blueCat您是否有显示浏览器可接受性的来源?兼容性测试工具表示广泛接受,但不是全部接受。当您说它们没有在GET请求中发送到S3存储桶时,您的确切意思是什么?它们正在被发送到CloudFront原点,而它没有转发cookies?此信息的来源是什么?需要澄清的是:Q1:
    Set Cookie
    s是否显示为响应头或从GET方法返回的响应体的一部分?问题2:您为
    getSignedCookie()
    选项指定了什么
    url
    policy
    ?@SteveBuzonas我正在检查通过chrome devtools中的网络选项卡发送的请求。Cookie未附加到API的GET请求@卡利德。Cookie显示为响应标题。我指定的URL是
    files.example.com/*
    {
        'Set-Cookie': `CloudFront-Expires=...; Domain=.example.com`,
        'SEt-Cookie': `CloudFront-Signature=...; Domain=.example.com`,
        'SET-Cookie': `CloudFront-Key-Pair-Id=...; Domain=.example.com`
    }