2017-08-14 109 views
0

我们使用CloudFront存储图像URL并使用签名的cookie仅通过我们的应用程序提供访问权限。如果没有签订饼干,我们都能够访问内容,但能够签署Cookie后,我们正在HTTP 403Cloudfront签署的Cookie问题,获得403

下面是配置/曲奇我们发送:

饼干要与要求:

  • 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。

为什么不按预期工作?

回答

0

审查的文件再次

只有3饼干,与最后被要么CloudFront-Expires罐头政策,或CloudFront-Policy定制政策。

我们使用CannedPolicy

的罐头政策有*一个隐含的资源,所以罐头政策声明不能有一个明确的Resource,所以你是在使用一个自定义策略的事实。如果所有其他操作都正确实施,那么您的解决方案可能只是删除CloudFront-Expires cookie,该cookie不会与自定义策略一起使用。

如果策略中唯一唯一的信息过期,则使用“罐装”(瓶装,罐装,预包装)策略。它们的优点是它们需要的带宽少得多(并且在创建签名URL时制作较短的URL)。他们的缺点是,他们是通配符的设计,这并不总是你想要的。

+0

Michael,我们只需要防止直接访问URL的内容,所以我们认为使用签名的cookie,以便内容仅通过应用程序访问。此外,我们只使用罐装政策。如果我们只发送三个Cookie:CloudFront-Expires:1522454400,CloudFront-Key-Pair-Id:xyz ...,CloudFront-Signature:abce ...我们仍然收到403. code:this.signedCookies = CloudFrontCookieSigner。getCookiesForCannedPolicy( \t \t \t \t Protocol.https,this.domain,privateKeyFile,this.resourcePath,this.keyPairId,expiresOn); – SANDIP

0

我有解决方案。我们的要求是通配符访问。 CloudFrontCookieSigner.getCookiesForCustomPolicy(this.resourcePath,pk,this.keyPairId,expiresOn,null,"0.0.0.0/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) 

我们要访问下发行的所有内容,罐头政策不允许通配符。所以,我们将其更改为自定义策略,并且工作正常。