我的主要问题是移动应用验证用户的典型方式是什么?我知道AmazonCognito用于在收到令牌后同步userdata,但该令牌只是一组访问规则,对吧?这与特定用户无关(只是他们一般是经过身份验证的用户)。
但在此之前,需要有一种方法来验证用户注册的用户名/密码,以便您可以检索令牌。在几乎所有文档中,他们使用Facebook / Google /等作为第三方提供商的示例,并且有一个设置您自己的第三方提供商的示例,但这都需要您自己的后端来为其提供服务。 ç
虽然可能有很多用户尝试使用该应用并进行身份验证,但在其他地方设置后端似乎不是一个坏主意吗?有没有办法将此部分集成到AWS中,以便没有自定义后端工作?这通常是怎么做的?
网站节点:我目前正在使用Android SDK。
谢谢:)
答案 0 :(得分:4)
AWS Cognito有两个不同的用途。一种是按照您在问题中描述的方式同步数据。 另一个是帮助管理用户身份,并在外部身份提供商(您自己的,Facebook,Google或亚马逊)和AWS之间创建粘合剂。
以下是高级别的工作流程。详情请见http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/cognito-auth.html
使用AWS控制台创建Cognito Identity Pool
将两个IAM策略与您的Cognito身份池相关联。一个用于未经身份验证的用户,另一个用于经过身份验证的用户。最佳做法是为这两类用户授予最低权限。 AWS控制台将帮助您完成这些步骤,并提出合理的默认值。
在您的代码中,初始化您的CognitoCredentialsProvider对象
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
myActivity.getContext(), // get the context for the current activity
"AWS_ACCOUNT_ID",
"COGNITO_IDENTITY_POOL",
"arn:aws:iam::AWS_ACCOUNT_ID:role/UNAUTHENTICATED_ROLE",
"arn:aws:iam::AWS_ACCOUNT_ID:role/AUTHENTICATED_ROLE",
Regions.US_EAST_1
);
在您的代码中,按照惯例继续对用户进行身份验证(使用您自己的提供商或Facebook,Google或亚马逊)
当您收到身份提供商发出的令牌时,请将其与Cognito相关联。 Cognito SDK将透明地将此令牌换成临时AWS Access Key,服务客户可以使用的密钥。
将凭据提供程序提供给服务客户端对象,例如
AmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider);
此方法允许您避免将自己的后端部署为AWS服务的代理。大多数服务呼叫都可以直接通过移动应用程序进行,从而以较低的成本实现良好的可扩展性。
您自己的后端只需要卸载移动设备的某些计算任务,或者如果您想要实现自己的身份提供程序并使其与Cognito交互(请参阅http://mobile.awsblog.com/post/Tx2FL1QAPDE0UAH/Understanding-Amazon-Cognito-Authentication-Part-2-Developer-Authenticated-Ident详细的工作流程)