我正在尝试将 Amazon Web Services 集成到我的应用程序中,但坦率地说,这是一个重大挑战,而且非常烦人。
我正在使用适用于 iOS 的 Amazon SDK (V2.1.0),这就是我想要实现的目标:
- 在我的应用程序中,我有一个注册屏幕,我的用户可以在其中使用 Facebook 或通过创建帐户来注册我的应用程序
- 如果用户希望创建一个帐户,我计划使用 Amazon Cognito 安全访问 Amazon DynamoDB(通过 iOS 应用程序),我将在其中存储电子邮件和密码。
我试图让 Amazon Cognito 在我的 ViewController 中使用以下代码,但我得到的变量 cognitoId 为 nil。我的代码如下:
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 .
开发人员身份验证可能是实现第二个用例的有效(且更安全)方式。该工作流将要求您有一个后端服务器,但您只能向该服务器授予对发电机数据库表的访问权限。用户登录后,应用程序会将数据发送到您的服务器,该服务器会验证并回复凭据,然后用户就可以访问您的其他 AWS 资源。描述此上下文中的角色和策略的博客文章可用 here并且可以提供有关细节的更多详细信息并列出端到端示例 here .
关于ios - 亚马逊 Cognito iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29325328/