我想允许iPhone应用程序的用户上传照片并使用Amazon S3.我有两种方法可以解决这个问题:
对于选项1,安全性很简单.我永远不必告诉iPhone我的S3秘密.缺点是所有内容都通过我们的服务器代理上传,这有点挫败了进入S3的目的.
对于选项2,理论上它更好,但问题是如何在不给我秘密的情况下将iPhone(或不同平台上的任何移动应用程序)写入我的S3存储桶?另外,我不确定这是否是一个好的设计,因为流程将是:iphone上传到S3,获取URL,然后告诉服务器URL是什么,以便它可以将它添加到我们的数据库以引用未来.但是,由于通信被分成两条腿(iphone-> S3 vs iPhone-> My-Server),因此它将其作为非原子操作而变得脆弱.
我发现了一些使用POST引用基于浏览器的上传的旧信息,但不确定这是否仍然是推荐的方法.我希望有一个更好的解决方案,我们可以使用REST API而不是依赖POST.我也看到了AWS iOS Beta SDK,但是他们的文档并没有多大帮助,我发现亚马逊的一篇文章同样无益,因为它会告诫你什么不该做,但没有告诉你另一种方法:
移动AWS开发工具包签署发送到Amazon Web Services(AWS)的API请求,以验证发出请求的AWS账户的身份.否则,恶意开发人员可以轻松地向其他开发人员的基础架构发出请求.请求使用AWS提供的AWS Access Key ID和Secret Access Key进行签名.秘密访问密钥类似于密码,保密是非常重要的.
提示:您可以在AWS网站http://aws.amazon.com/security-credentials上查看所有AWS安全凭证,包括访问密钥ID和秘密访问密钥 .
在源代码中嵌入凭证对于包括移动应用程序在内的软件来说是有问题的,因为恶意用户可以对软件进行解编译或查看源代码以检索秘密访问密钥.
有没有人对最佳建筑设计和流程有任何建议?
更新:我越深入研究,似乎有很多人建议使用HTTP POST方法和json策略文件,如下所述:http://docs.amazonwebservices.com/AmazonS3/2006-03-01/dev /index.html?UsingHTTPPOST.html.
有了这个,流程就像(1)iPhone向我的服务器发出请求,请求策略文件(2)服务器生成json策略文件并返回给客户端(3)iPhone将照片+ json策略的HTTP POST发送到S3 .我讨厌我以明显的kludgy方式使用HTTP POST,但它看起来更好,因为它根本不需要我的服务器来存储照片.