2013-08-28 135 views
0

這使我整夜都在瘋狂。Amazon S3存儲桶策略權限不允許Dropbox API從存儲桶中提取文件

我在PHP/MYSQL中編寫了一個完美工作的DropBox應用程序,它從Amazon S3存儲桶中提取文件並將它們發送給用戶Dropbox文件夾。

然後,我改變在亞馬遜S3桶鬥策略,以允許文件從僅引薦的少數被拉動,並簽署URLS(例如:/musicfile.mp3?AWSAccessKeyId=[accesskeyid] &過期= [到期] &簽名= [簽名])。

這適用於所有用途,除了我瞭解到我的Dropbox功能不再有效以外,這是因爲您將Dropbox API傳遞給Amazon S3上的mp3的URL,並且在Dropbox的一側它們將文件拉入,所以現在我有桶政策只允許某些推薦人,Dropbox獲得權限被拒絕,API告訴我它失敗。

所以我認爲簡單的修復,我只是簡單地添加?AWSAccessKeyId =等等等文件傳遞到Dropbox的結尾,所有將立即工作,但它並不是因爲該文件然後沒有結束在擴展Dropbox識別,所以它再次失敗。

然後我想我只是簡單地將Dropbox的引用鏈接添加到我的存儲桶策略中,但我仍然不知道它是什麼,並且添加了dropbox.com和api.dropbox的所有變種,沒有運氣。

如果有人有任何想法或解決方案,你會認真做我的一週。

我想要做的絕對最後一件事是被迫首先下載文件到我的服務器,然後發送到Dropbox,我真的不想這樣做,我知道我已經完美的工作,因爲它已經是,當我完全刪除我的存儲桶策略時,它會立即生效,我只是希望它能與它一起工作。

回答

1

我認爲,因爲您提到將URL傳遞給Dropbox,您使用的是the Saver?如果是這樣,你可以告訴Saver使用哪個文件名,所以給它授權的URL並指定一個文件名,這樣就有一個文件擴展名。例如:

<a href="https://...?AWSAccessKeyId=..." class="dropbox-saver" data-filename="myfile.txt"></a> 

,或者在JavaScript:

Dropbox.save('https://...?AWSACcessKeyId=...', 'myfile.txt'); 

當你說「因爲該文件,然後在擴展並沒有結束Dropbox的認識,從而再次失敗的工作,」你是什麼是什麼意思?文件沒有擴展名時出了什麼問題?

0

當所有其他操作失敗時...檢查日誌。

Turn on logging for your bucket,運行一些測試,等待幾分鐘以顯示日誌,然後檢查日誌以查看引用者是什麼。似乎可以肯定的是,不會有引用者,因爲不是Web瀏覽器的用戶代理(如Dropbox的後端進程)通常沒有理由發送引用者。

如果有任何安慰,通過約束引用者來「保護」桶就好像根本不保護桶。這是非常簡單的失敗,所以它只是針對兩類人真正有效的保護:

  • 老實人
  • 懶人

http://en.wikipedia.org/wiki/Referer_spoofing

相關問題