9

我想集成一个非常标准的功能:让用户(移动和网络)选择使用电子邮件/密码或使用 RBAC 的 Facebook(谷歌)帐户登录(不同的用户可能有不同的角色,如用户、版主、管理员、创建者, ETC)。这基本上是我想要登录的内容:

在此处输入图像描述

我浏览了许多 AWS 教程和其他材料。我对如何实现它有所了解,但我仍然没有全貌。希望有人可以在这里帮助我。

这是我目前的理解(请在我错的地方纠正我)。

1)对于电子邮件/密码注册/登录,我使用用户池。当用户登录时,我调用 authenticateUser(我使用的是 JS SDK):

cognitoUser.authenticateUser(authenticationDetails, {
..
})

在哪里成功

  • 我存储身份、访问和刷新令牌,因此,用户不必每次都输入他的凭据
  • 因为用户将访问 AWS 服务(例如 S3),所以我将 idToken 交换为 AWS 凭证
  • 在访问资源时将 AWS 凭据存储在 LocalStore 中以供进一步使用

2) 对于 facebook 登录,我使用联合身份

  • 获取 Facebook 访问令牌
  • 使用 fb 令牌获取 cognito 身份
  • 将认知身份交换为 AWS 凭据并将其存储在 LocalStore

问题:

Q1。注册/登录的逻辑是否有效且相当完整?我错过了什么吗?

Q2。我应该如何存储 Facebook 用户?我可以在用户池中执行此操作吗?我的印象是这是不可能的,但这意味着我有 2 个不同的用户目录:一个在 UserPool 中,另一个在另一个地方(假设在 DynamoDB 中)

Q3。如果我必须将用户存储在不同的地方(UserPool 和 DynamoDB),这意味着我有 2 个用户,基本上是一个用户,他们首先使用电子邮件/密码注册,然后决定使用 facebook——这对我作为应用程序管理员和用户来说都是不便. 如何处理这种情况?

Q4。如何为使用 facebook 令牌登录的用户(如用户、版主、管理员、创建者等)管理群组?

Q5。我应该如何限制 Facebook 登录用户对 AWS 以外的资源的访问?

Q6。有什么可行的例子吗?

谢谢!

4

2 回答 2

7

我们通过 Facebook、Google 和 LoginWithAmazon为用户池添加了对联合的支持。当用户使用联合登录时,这将在用户池中创建一个用户。您还可以使用属性映射功能从身份提供者捕获属性。

此外,如果您使用应用程序集成功能,Amazon Cognito 用户池将为您生成这样的登录页面。

通过 Amazon Cognito 控制台向社交提供商登录/注册的步骤:

  1. 为您的用户池配置一个域,例如 .auth..amazoncognito.com
  2. 添加任何社交提供者并配置属性映射。
  3. 在 App Client 上启用提供程序。
  4. 配置回调 URI、OAuth 响应类型和允许的范围。
  5. 在 https://.auth..amazoncognito.com/login?client_id=&response_type=&redirect_uri= 访问您的托管 UI
  6. 单击按钮以使用 Facebook(或您的提供商)注册/登录。
  7. 通过提供者进行身份验证,您将被重定向到带有令牌/代码的回调 URI。
  8. 在 Amazon Cognito 控制台中检查新创建的用户。
于 2017-08-10T22:22:31.220 回答
6
  1. 我是人类,可能错过了一些东西,但这对我来说听起来不错。

  2. 您不能将联合身份登录存储在用户池中。用户池作为另一个身份提供者,就像 Facebook 一样。Dynamo(或其他东西)将是要走的路。

  3. 如果用户同时登录并链接这些登录名,您可能需要考虑完全避免使用用户池属性,而仅使用 dynamo。通过链接两个登录,Cognito 联合身份只需要一个登录令牌即可继续,但用户池需要它的登录令牌才能查看/更新属性。用户必须使用用户池登录才能触摸这些属性,它会变得一团糟。

  4. 我不知道这是开箱即用的支持,就像用户池一样。您可能必须使用上述假设的用户数据库来执行此操作。
  5. 您还可以将您的用户池链接到作为提供商的 Cognito,就像您为 Facebook 所做的那样。这就是您将 id 令牌交换为凭证的方式。
  6. 该服务没有官方示例,尽管我不能代表其他人。
于 2017-05-16T19:46:22.887 回答