在CloudFront上的子域之间签名的cookie

时间:2018-03-08 11:37:05

标签: amazon-web-services cookies amazon-cloudfront

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

  1. 为具有CloudFront分配的静态站点提供服务的S3存储桶。 CNAME:example.com
  2. 具有自定义域的API网关API:api.example.com
  3. 带有CNAME的CloudFront分配的S3存储桶:files.example.com
  4. example.com上的Web应用程序在api.example.com上联系lambda代理GET方法。除其他外,此函数返回包含AWS.CloudFront.Signer.getSignedCookies()

    生成的值的标头
    {
        'Set-Cookie': `CloudFront-Expires=...; Domain=.example.com`,
        'SEt-Cookie': `CloudFront-Signature=...; Domain=.example.com`,
        'SET-Cookie': `CloudFront-Key-Pair-Id=...; Domain=.example.com`
    }
    

    这些是通过响应发送到客户端的,但由于某种原因,未在GET请求中发送到files.example.com上的S3存储桶。

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

    据我所知,配置应该在域cookie策略方面起作用(子域名正在尝试设置一个父域的cookie,在该域下是父域的不同子域,应该接收cookie)。这种行为的任何其他直接嫌疑人?

1 个答案:

答案 0 :(得分:0)

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

您还需要确保将Cookie转发到您的CloudFront行为中的来源。