【问题标题】:Typical app user authentication using AWS使用 AWS 的典型应用程序用户身份验证
【发布时间】:2014-11-27 18:57:26
【问题描述】:

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

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

考虑到可能有很多用户尝试使用该应用程序并进行身份验证,在其他地方设置后端似乎不是一个坏主意吗?有没有办法将这部分也集成到 AWS 中,这样就没有自定义后端工作了?这通常是如何完成的?

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

谢谢:)

【问题讨论】:

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


    【解决方案1】:

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

    这是高层次的工作流程。详情可至http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/cognito-auth.html

    1. 使用 AWS 控制台,创建 Cognito 身份池

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

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

    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 或 Amazon)

    2. 当您收到身份提供者颁发的令牌时,请将其关联到 Cognito。 Cognito SDK 将透明地将此令牌换成临时 AWS 访问密钥,即服务客户端可以使用的密钥。

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

    AmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider);

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

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

    【讨论】:

    • 所以我现在最终要做的是创建一个访问受限的用户,并使用 BasicAWSCredentials 使用他们的密钥/秘密登录。从那里我通过将 IdentityId 保留为空来请求“DeveloperIdentity”的令牌,以便它创建一个用户。从那里它给了我一个新的 IdentityId 和 Token,我用它来使用 CognitoCachingCredentialsProvider 登录到池中。然后从那里将凭证提供给我想要使用的 w/e(在本例中为 AmazonDynamoDBClient)。
    • 这一切似乎都有效,除非我尝试将凭证与 AmazonDynamoDBClient 一起使用,它告诉我我没有“被授权执行 sts:AssumeRoleWithWebIdentity”,这没有意义,因为我很漂亮当然,我已将信任/政策设置为应有的样子。这是因为我在身份验证中没有做正确的事情,还是我设置的整个方案有误?
    • 在 IAM 中创建最终用户身份并对其访问密钥/秘密密钥进行编码并不是最佳实践。 IAM 限制为 5000 个用户,因此您的应用程序不会超出此范围,并且更改应用程序中的 AK/SK 非常复杂。阅读此分步说明docs.aws.amazon.com/mobile/sdkforios/developerguide/…
    • 如果您想使用自己的身份验证系统(而不是 Facebook、Google、Amazon)对用户进行身份验证,您将需要拥有自己的后端系统,该系统将通过单个 cognito API 调用与 Cognito 集成用户认证后。详情在mobile.awsblog.com/post/Tx2FL1QAPDE0UAH/…
    • 没关系!我得到了这个工作。好像我忘了更新角色的名称 - 当然,像这样的错误总是愚蠢的。你的回答对于原始问题仍然是正确的,所以谢谢你:)
    猜你喜欢
    • 2019-10-26
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    相关资源
    最近更新 更多