如何在iOS中包含Amazon DynamoDB访问密码?

时间:2015-03-24 08:43:22

标签: ios authentication amazon-dynamodb

我的iOS应用程序的一部分需要将用户的电子邮件地址保存在中央数据库中。我选择使用Amazon DynamoDB。我不需要每个应用程序用户拥有自己的凭据,我只想为应用程序本身提供一个用户名/密码来写回数据库。

使用亚马逊示例代码,我把它放在app delegate:

AWSCognitoCredentialsProvider *credentialsProvider = [AWSCognitoCredentialsProvider credentialsWithRegionType:CognitoRegionType
                                                                                               identityPoolId:CognitoIdentityPoolId];
AWSServiceConfiguration *configuration = [AWSServiceConfiguration configurationWithRegion:DefaultServiceRegionType
                                                                      credentialsProvider:credentialsProvider];
[AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;

在IAM管理器中创建完全访问角色,然后使用以下代码写入数据库:

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

AWSDynamoDBObjectMapper *dynamoDBObjectMapper = [AWSDynamoDBObjectMapper defaultDynamoDBObjectMapper];


NSString *uuid = [[NSUUID UUID] UUIDString];
NSString *emailAddress = ([self.emailAddress.text length]>0)?self.emailAddress.text:@"a@b.com";


EaSLIEmailList *emailListItem = [EaSLIEmailList new];
emailListItem.UUID = uuid;
emailListItem.EmailAddress = emailAddress;

NSMutableArray *tasks = [NSMutableArray array];
[tasks addObject:[dynamoDBObjectMapper save:emailListItem]];

[[BFTask taskForCompletionOfAllTasks:tasks]
 continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) {
     if (task.error) {
         NSLog(@"Error: [%@]", task.error);
     }

     [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

     return nil;
 }];

这绝对没问题,但我不确定这是否安全。我想我应该创建一个用户和密码来嵌入应用程序。

我很感激任何人对最佳和最简单的方法的指导。

(我担心的是,如果我不这样做,那么有人可以在不通过应用程序的情况下访问数据库。)

1 个答案:

答案 0 :(得分:0)

您的后端可以致电AWS Security Token Service生成临时凭据,然后将其传递给移动设备。可以为这些凭据分配仅对DynamoDB中的特定项目的权限(因此,即使凭据被泄露,它们也不会泄露任何其他数据)。