我正在尝试将Amazon Web Services集成到我的应用程序中,但是坦率地说,这是一个重大挑战,而且非常烦人。

我正在使用iOS的Amazon SDK(V2.1.0),这是我想要实现的目标:

  • 在我的应用程序中,我有一个注册屏幕,用户可以在其中使用Facebook或通过创建一个帐户
  • 来注册我的应用程序
  • 如果用户希望创建一个帐户,我计划使用Amazon Cognito安全地(通过iOS应用程序)访问Amazon DynamoDB,我将在其中存储电子邮件和密码。

  • 我正在尝试让Amazon Cognito在ViewController中使用以下代码,但是对于变量 cognitoId ,我得到的是零。我的代码如下:
    AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1
                                                                                                    identityPoolId:@"us-east-1:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX"];
    AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1
                                                                         credentialsProvider:credentialsProvider];
    AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
    
    NSString *cognitoId = credentialsProvider.identityId; //NULL
    

    基于以上所述,我有以下问题:
  • 在这种情况下,我对Amazon Cognito的使用案例是否正确?
  • 上面的代码为什么不起作用?
  • 我认为问题可能与在身份池中配置的iam角色有关。我不确定在安全性方面应该扮演什么角色。一旦用户注册,该应用将需要权限才能写入我的DynamoDB,而不会暴露出任何安全漏洞。谁能对此提供任何见解?

  • 我感谢任何可以提供帮助的人。我迷失了试图在最后几天使它正常工作的想法。

    谢谢!

    最佳答案

    默认情况下未设置Cognito身份ID。您是要调用getIdentityId还是要与提供者进行刷新?如果没有,我会尝试一下,看看是否有结果。

    至于您的其他问题,Cognito支持“公共(public)提供者”,例如facebook,google和amazon,以及开发人员经过身份验证的身份。对于Facebook的建议案例,您可以在此处轻松使用Cognito。有关Cognito角色和策略的博客文章可在here上找到。

    开发人员验证的身份可能是实现第二个用例的有效(且更安全)的方式。该工作流程将需要您拥有后端服务器,但您只能将对该服务器的dynamo db表的访问权限授予该服务器。用户将登录,应用程序会将数据发送到您的服务器,该服务器将验证并使用凭证进行回复,然后用户可以访问您的其他AWS资源。可以在here上找到描述此角色和策略的博客文章,并在here上提供一个详细说明细节并列出端到端示例的博客文章。

    关于ios - 亚马逊Cognito iOS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29325328/

    10-11 19:23