AWS cognito:使用 usernam/password 或 facebook 登录

AWS cognito: sign in with usernam/password OR facebook

我想集成一个非常标准的功能:让用户(移动和网络)选择使用 email/password 或 facebook (google) 帐户登录 RBAC(不同的用户可能有不同的角色,如用户、版主、管理员、创建者等)。这基本上是我想要登录的内容:

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

这是我目前的理解(不对的地方请指正)。

1) 对于 email/password signup/signin 我使用了一个用户池。当用户登录时,我调用 authenticateUser(我使用的是 JS SDK):

cognitoUser.authenticateUser(authenticationDetails, {
..
})

成功时

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

问题:

Q1。 sign-up/sign-in 是否有效且相当完整的逻辑?我错过了什么吗?

Q2。我应该如何存储 facebook 用户?我可以在用户池中执行吗?我觉得这是不可能的,但这意味着我有 2 个不同的用户目录:一个在 UserPool 中,另一个在另一个地方(比如在 DynamoDB 中)

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

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

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

Q6。有任何工作示例吗?

谢谢!

  1. 我是人,可能错过了一些东西,但这对我来说听起来不错。

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

  3. 如果用户使用这两种登录方式登录,linking 这些登录方式,您可能需要考虑完全避免使用用户池属性,而只使用 dynamo。使用两次登录 linked,Cognito 联合身份只需要一个登录令牌即可继续,但用户池需要它的登录令牌到 see/update 属性。用户必须使用用户池登录才能访问这些属性,这会变得很混乱。

  4. 我不知道这是开箱即用的支持,就像用户池一样。您可能必须使用上述假设的用户数据库来执行此操作。
  5. 您还可以 link 将您的用户池作为提供商提供给 Cognito,就像您为 Facebook 做的那样。这就是您用 id 令牌交换凭据的方式。
  6. 该服务没有官方示例,但我不能代表其他人。

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

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

通过 Amazon Cognito 控制台与社交提供商 SignIn/SignUp 的步骤:

  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. 点击按钮 SignUp/SignIn 与 Facebook(或您的供应商)。
  7. 向提供商进行身份验证,您将被重定向到 tokens/code 的回调 URI。
  8. 在 Amazon Cognito 控制台中检查新创建的用户。