Amazon S3存储桶策略权限不允许Dropbox API从存储桶中提取文件

时间:2013-08-28 08:13:08

标签: php amazon-web-services amazon-s3 dropbox-api dropbox-php

这让我整夜疯狂。

我在PHP / MYSQL中编写了一个完美的DropBox应用程序,它从Amazon S3 Bucket中提取文件并将它们发送给用户的Dropbox文件夹。

然后我更改了Amazon S3存储桶上的存储桶策略,以便只从少数引用程序中提取文件,并签名URLS(例如:/musicfile.mp3?AWSAccessKeyId = [accesskeyid]& Expires = [expires] &安培;签名= [签名])

这适用于所有目的,除了我了解我的Dropbox功能不再有效,这是因为您将Dropbox API传递给Amazon S3上的mp3的URL,而在Dropbox的一侧他们将文件拉入,所以现在我让存储桶策略只允许某些引用,dropbox获得权限被拒绝,API告诉我它失败了。

所以我认为简单的修复,我只是简单地添加?AWSAccessKeyId = blah blah到传递给dropbox的文件的末尾,所有这些都会立即生效,但是,它不会因为文件没有以一个扩展Dropbox识别它再次无法工作。

然后我想我只是简单地将Dropbox中的引荐来源添加到我的存储桶策略中,但我仍然不知道它是什么,并添加了dropbox.com和api.dropbox的所有变体,包括和不包含https,都没有运气。

如果有人有任何想法或解决方案,你会认真度过我的一周。

我想要做的绝对最后一件事是被迫首先将文件下载到我的服务器,然后发送到dropbox,我真的不想这样做,我知道我已经完成了这个工作,因为它是,当我完全删除我的存储桶策略时它会立即生效,我只是希望它可以使用它。

2 个答案:

答案 0 :(得分:1)

我认为,因为您提到将网址传递给Dropbox,您使用的是the Saver?如果是这样,您可以告诉Saver要使用的文件名,因此请为其指定授权URL并指定文件名,以便有文件扩展名。 E.g:

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

或者,在JavaScript中:

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

当你说“因为文件然后没有在扩展中结束时Dropbox会识别它再次无法工作”,你的意思是什么?文件没有扩展名时会出现什么问题?

答案 1 :(得分:0)

当其他所有方法都失败时......检查日志。

Turn on logging for your bucket,运行一些测试,等待几分钟以显示日志,然后检查日志以查看引用者是什么。似乎可以肯定的是,不存在引用者,因为不是Web浏览器的用户代理(例如Dropbox的后端进程)通常没有理由发送引用者。

如果有任何安慰,通过限制引用来“保护”一个桶几乎就像没有保护桶一样。失败非常简单,因此它只能真正有效地防范两类人:

  • 诚实的人
  • 懒人

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