2013-06-21 63 views
0

我有一個亞馬遜s3帳戶,我用它來保存圖像。我將圖片保存爲私人圖片,以便只有我的網站才能使用s3 apis獲取圖片。不過,我的網站有一個將更新發布到facebook的功能。允許Facebook抓取Amazon S3圖像

FB.api('/me/feed', 'post', { 
      link: PAGEURL, 
      picture: PICTUREURL, 
      name: TITLE, 
      description: DESCRIPTION 
     }, function(response) { 
}); 

爲此,我需要PICTUREURL。所以我的問題是如何讓s3存儲桶只提供給facebook?

回答

1

我懷疑你可以只提供給Facebook。即使可以,我也不認爲這會讓訪客看到這張照片。但無論如何,這裏都是。

要使圖片對Facebook可見,請使用過期的,預先簽名的URL。而不是發送PICTUREURL參數的常規S3 URL,而是創建一個在幾分鐘內過期的URL(足以讓Facebook抓取圖片)並使用它。我不確定您使用的是什麼語言或S3庫,但他們都支持創建此類預先簽名的URL。

壞消息是,這可能沒有幫助。這是因爲Facebook可能只是使用您提供的URL來顯示圖片,而不是複製圖片並顯示其副本。如果是這樣,那麼最終的最終用戶將使用您給Facebook的URL,並且在他們看到它之前即將過期。

當然,您可以使用將來會過期的URL,但如果您這樣做了,那麼您最好先公開S3對象。

+0

嗯有效點,但是沒有辦法使用存儲桶策略來執行此操作嗎? – pewpewlasers

+1

那麼,你不能基於特定的AWS賬戶採取行動,因爲Facebook沒有(或者我們不知道的)賬戶。您無法將其限制爲特定的IP地址,因爲無法知道Facebook可能使用哪些IP地址。 如果Facebook只是把你的URL放在他們的頁面中,你可以使用一個策略來限制對從Facebook URL引用的請求的訪問。那會做你想做的,但不是很安全。任何人僞造引薦標題都是微不足道的。 –