我的目标:
使用最简单的代码将照片从iOS上传到常见的AWS S3存储桶
我尝试过的事情:
最佳做法的假设:
我认为Cognito是我完成所有阅读后设置图像上传的默认方式。但是,我这样做有两个问题:
我的问题:
答案 0 :(得分:7)
Cognito Identity是一项免费服务,因此您无需支付任何费用。此外,你真的不应该在你的应用程序中使用硬编码凭据,因为它可以很容易地反编译和检索,这不是服务器端代码的情况。
对于iOS SDK,您可以使用AWSStaticCredentialsProvider
作为向任何服务客户端提供静态凭据的方式。
AWSStaticCredentialsProvider *credentialsProvider = [AWSStaticCredentialsProvider credentialsWithAccessKey:@"YourAccessKey" secretKey:@"YourSecretKey"];
再次,你真的不应该在生产应用程序中这样做。
答案 1 :(得分:3)
我建议不要在没有Cognito的情况下在Moblie应用程序中使用AWS。
如果您仍想这样做,您可以为您的存储区资源创建IAM用户设置策略,并将IAM用户凭据放入您的代码中“AWSCredentials credentials = new AWSCredentials(){
@Override
public String getAWSSecretKey() {
// TODO Auto-generated method stub
return "YOUR_SECRETKEY";
}
@Override
public String getAWSAccessKeyId() {
// TODO Auto-generated method stub
return "YOUR_IAM_AWS_ACCESS_KEY_ID";
}
};
AmazonS3 s3 = new AmazonS3Client(credentials);`
注意该方法使用危险!! 您可以设置AWS S3 Bucket权限策略S3 permission policy。
答案 2 :(得分:0)
认知部分要求让这项工作免费。来自cognito FAQ:
“使用Cognito Identity,用于验证用户和生成唯一标识符的联合身份证明功能始终是免费的。”
此外,AWS SDK中有一种方法AssumeRoleWithWebIdentity,它允许您使用openid连接提供程序承担AWS IAM中定义的角色。如果您没有使用开放式ID连接提供商,但您已设法使用后端进行身份验证,则可以使用 Cognito.GetOpenIdTokenForDeveloperIdentity为此用例提供令牌。
这里有一个很好的理解资源: https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication-part-2-developer-authenticated-identities/