2017-08-14 46 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) 

我們要訪問下發行的所有內容,罐頭政策不允許通配符。所以,我們將其更改爲自定義策略,並且工作正常。