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

Vic*_*c K 9 amazon-web-services facebook-login amazon-cognito amazon-cognito-facebook aws-cognito

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

在此输入图像描述

我浏览了许多AWS教程和其他材料.我掌握了如何实现它,但我仍然没有完整的图片.希望有人可以帮助我.

这是我目前的理解(请纠正我,我错了).

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

cognitoUser.authenticateUser(authenticationDetails, {
..
})
Run Code Online (Sandbox Code Playgroud)

在哪里onSuccess

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

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

  • 获取facebook访问令牌
  • 使用fb令牌获得认知身份
  • 将认知身份与AWS信用交换,并将其存储在LocalStore中

问题:

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

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

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

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

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

Q6.这有什么实际的例子吗?

谢谢!

Jef*_*ley 5

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

  2. 您不能在用户池中存储联合身份登录名。就像Facebook一样,用户池是另一个身份提供者。发电机(或其他东西)将是必经之路。

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

  4. 我不知道这是开箱即用的,就像用户池一样。您可能必须使用上述假设的用户数据库来执行此操作。
  5. 您也可以将您的用户群作为提供者链接到Cognito,就像您对Facebook所做的一样。这就是您将ID令牌交换为凭证的方式。
  6. 该服务没有官方的例子,尽管我不能代表别人。


Rac*_*all 5

我们通过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控制台中检查新创建的用户。

  • 医生说有可能。我正在尝试将其实施到我的应用程序中。但是我有一些困难的时间去做。是否有任何官方样本或教程? (3认同)
  • 该文档显示了如何使用 cognitoidentitycredentials 对象。这是如何在用户池中创建具有属性映射的用户的?我可以看到联合身份池中的身份,但看不到用户池中的任何用户?我还在用户池中设置了联合身份。这如何创造 Facebook 用户? (2认同)