让我们从问题陈述开始:
我的iOS应用程序有一个登录表单。当用户登录时,将调用我的API并授予或拒绝访问权限。如果授予了访问权限,我希望用户能够将图片上传到他的帐户和/或管理它们。
作为存储,我选择了亚马逊S3,我认为最好有一个名为“myappphotos”的存储桶,其中包含大量文件夹。文件夹名称是用户电子邮件和密钥的哈希值。因此,每个用户在我的Amazon S3存储桶中都有自己独特的文件夹。
由于我刚刚开始使用AWS,这是我的问题:
设置这样的系统有哪些最佳做法?我希望用户能够将图片直接上传到Amazon S3,但当然我无法对访问密钥进行硬编码。因此,我需要我的API以某种方式与亚马逊交谈,并请求各种访问令牌 - 仅针对属于我正在请求的用户的特定文件夹。
任何人都可以帮助我和/或引导我找到解决类似问题的某些来源吗?不要以为我是第一个,亚马逊的文档太广泛了,我真的不知道从哪里开始看。
非常感谢!
答案 0 :(得分:13)
来自文档:
AWSiOSDemoTVM和AWSiOSDemoTVMIdentity样本演示了更多内容 用于将AWS安全凭证传输到移动设备的安全机制 客户。这些示例需要服务器应用程序,在本例中为 令牌自动售货机(TVM),作为单独下载提供。 示例应用程序向TVM注册,匿名或使用 用户提供的用户名和密码。 TVM使用AWS Security 令牌服务以获取临时安全凭证并将其传递给 移动应用程序。
TVM有两种形式,一种支持匿名 注册和需要用户名和密码的注册 注册设备并接收安全令牌。下载并安装 用于匿名注册的TVM,请转到 http://aws.amazon.com/code/8872061742402990。下载并安装 身份登记TVM,请转到 http://aws.amazon.com/code/7351543942956566
来自Authenticating Users of AWS Mobile Applications with a Token Vending Machine:
本文讨论了支持应用程序的体系结构 在移动设备上运行以更安全地与Amazon Web交互 Amazon Simple Storage Service(S3),Amazon SimpleDB等服务, Amazon Simple Notification Service(SNS)和Amazon Simple Queue 服务(SQS)。讨论的架构使用“令牌自动售货机” 机器“将临时安全凭证分发给移动设备 应用
您的令牌可以限制对S3上特定存储桶的访问,因此它似乎是最佳选择。
答案 1 :(得分:2)
ASIHTTPRequest直接支持Amazon S3。
答案 2 :(得分:2)
进一步澄清Terry Wilcox的答案......
您需要使用AWS STS 在服务器上生成临时安全凭据。
STS是AWS的“安全令牌服务”。它允许您以编程方式创建访问密钥并设置特定权限和到期日期。
由于您的应用程序的API /后端已经对用户进行身份验证,因此您可以进行API调用,以生成只能访问该用户文件夹的临时AWS凭据。
如果您没有应用程序的后端,亚马逊提供了一个Java应用程序调用TVM(令牌自动售货机),您可以轻松地将自己的实例部署到Elastic Beanstalk。
相关AWS文章:
http://aws.amazon.com/articles/4611615499399490
http://docs.aws.amazon.com/STS/latest/UsingSTS/STSUseCases.html#MobileApplication
答案 3 :(得分:0)
您可以限制用户对文件夹级别的访问权限。请参阅此示例Credential Management。
答案 4 :(得分:0)
2020-您应该使用亚马逊官方工具:Amplify 。
它基本上要求您的用户对应用进行身份验证(与Firebase有点相似),从而为您保护连接。
这里有一个很棒的文件上传示例: https://docs.amplify.aws/lib/storage/getting-started/q/platform/ios#initialize-amplify-storage