使用AWS的典型应用用户身份验证

时间:2014-11-27 18:57:26

标签: android authentication amazon-web-services mobile-application

我的主要问题是移动应用验证用户的典型方式是什么?我知道AmazonCognito用于在收到令牌后同步userdata,但该令牌只是一组访问规则,对吧?这与特定用户无关(只是他们一般是经过身份验证的用户)。

但在此之前,需要有一种方法来验证用户注册的用户名/密码,以便您可以检索令牌。在几乎所有文档中,他们使用Facebook / Google /等作为第三方提供商的示例,并且有一个设置您自己的第三方提供商的示例,但这都需要您自己的后端来为其提供服务。 ç

虽然可能有很多用户尝试使用该应用并进行身份验证,但在其他地方设置后端似乎不是一个坏主意吗?有没有办法将此部分集成到AWS中,以便没有自定义后端工作?这通常是怎么做的?

网站节点:我目前正在使用Android SDK。

谢谢:)

1 个答案:

答案 0 :(得分:4)

AWS Cognito有两个不同的用途。一种是按照您在问题中描述的方式同步数据。 另一个是帮助管理用户身份,并在外部身份提供商(您自己的,Facebook,Google或亚马逊)和AWS之间创建粘合剂。

以下是高级别的工作流程。详情请见http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/cognito-auth.html

  1. 使用AWS控制台创建Cognito Identity Pool

  2. 将两个IAM策略与您的Cognito身份池相关联。一个用于未经身份验证的用户,另一个用于经过身份验证的用户。最佳做法是为这两类用户授予最低权限。 AWS控制台将帮助您完成这些步骤,并提出合理的默认值。

  3. 在您的代码中,初始化您的CognitoCredentialsProvider对象

  4. 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 );

    1. 在您的代码中,按照惯例继续对用户进行身份验证(使用您自己的提供商或Facebook,Google或亚马逊)

    2. 当您收到身份提供商发出的令牌时,请将其与Cognito相关联。 Cognito SDK将透明地将此令牌换成临时AWS Access Key,服务客户可以使用的密钥。

    3. 将凭据提供程序提供给服务客户端对象,例如

    4. AmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider);

      此方法允许您避免将自己的后端部署为AWS服务的代理。大多数服务呼叫都可以直接通过移动应用程序进行,从而以较低的成本实现良好的可扩展性。

      您自己的后端只需要卸载移动设备的某些计算任务,或者如果您想要实现自己的身份提供程序并使其与Cognito交互(请参阅http://mobile.awsblog.com/post/Tx2FL1QAPDE0UAH/Understanding-Amazon-Cognito-Authentication-Part-2-Developer-Authenticated-Ident详细的工作流程)