Cloudfront签署了cookie问题,获得了403

时间:2017-08-14 08:38:52

标签: cookies amazon-cloudfront http-status-code-403

我们已使用CloudFront存储图像网址,并使用已签名的Cookie仅通过我们的应用程序提供访问权限。没有签名的cookie,我们可以访问内容,但在启用签名的cookie后,我们将获得HTTP 403。

以下是我们发送的配置/ cookies:

Cookie随请求发送:

  • CloudFront-Expires: 1522454400
  • CloudFront-Key-Pair-Id: xyz...
  • CloudFront-Policy: abcde...
  • CloudFront-Signature: abce...

以下是我们的CloudFront政策:

{
   "Statement": [
      {
         "Resource":"https://*.abc.com/*",
         "Condition":{
            "DateLessThan":{"AWS:EpochTime":1522454400}
         }
      }
   ]
}

Cookie域为.abc.com,资源路径为https://*.abc.com/*

我们正在使用CannedPolicy创建CloudFront个Cookie。

为什么这不按预期工作?

3 个答案:

答案 0 :(得分:0)

再次查看文档

只有3个Cookie,预制政策的最后一个为#include <iostream> #include <vector> template<class T> class Foo { public: T getVar(T var) { return var; } }; int main() { template<class T> std::vector<Foo<T>> foos; Foo<int> foo1; Foo<double> foo2; foos.push_back(foo1); // doesn't work this way foos.push_back(foo2); return 0; } 自定义政策为CloudFront-Expires。< / p>

  

我们正在使用CannedPolicy

预制策略的隐式资源为CloudFront-Policy,因此预设的策略语句不能具有明确的*,因此您实际上正在使用自定义策略。如果其他所有内容都已正确实施,那么您的解决方案可能只是删除Resource Cookie,该Cookie不会与自定义策略一起使用。

“罐装”(瓶装,装箱,预包装)政策用于政策中唯一唯一信息到期的情况。它们的优点是它们需要的带宽略微减少(并且在创建签名URL时会缩短URL)。它们的缺点在于它们是通用设计的通配符,并不总是你想要的。

答案 1 :(得分:0)

我有解决方案。我们的要求是通配符访问。 where resource path = https+ "distribution name" + /* activeFrom = it is optional so pass it as null pk = private key ( few api also take file but it didn't work, so get the private key from file and use above function)

{{1}}

我们要访问分发中的所有内容,预设策略不允许使用通配符。因此,我们将其更改为自定义政策并且有效。

答案 2 :(得分:0)

虽然 403 可能有多种原因 - AccessDenied 作为响应。在我们的案例中,经过调试后,我们了解到在使用签名 cookie 时 - CloudFront-Key-Pair-Id cookie 对于每个请求都保持不变,而 CloudFront-Policy >CloudFront-Signature cookie 更改每个请求的值,否则将发生 403 访问被拒绝。