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

时间:2017-05-09 07:13:46

标签: amazon-web-services facebook-login amazon-cognito aws-cognito amazon-cognito-facebook

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

enter image description here

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

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

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

cognitoUser.authenticateUser(authenticationDetails, {
..
})

其中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。这有什么实际的例子吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

  1. 我是人,可能错过了什么,但这对我来说听起来不错。

  2. 您无法在用户池中存储联合身份登录。用户池作为另一个身份提供者,就像Facebook一样。迪纳摩(或其他东西)将是最佳选择。

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

  4. 我不知道这是开箱即用的,就像用户池一样。您可能必须使用上述假设的用户数据库执行此操作。
  5. 您还可以将您的用户池链接到Cognito作为提供商,就像您对Facebook一样。这就是你如何交换身份凭证的凭证。
  6. 该服务没有官方示例,但我不能代表其他人。

答案 1 :(得分:4)

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

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

通过Amazon Cognito Console与社交提供商签名/签名的步骤:

  1. 为您的用户池配置域名,例如.auth..amazoncognito.com
  2. 添加任何社交提供商并配置属性映射。
  3. 在App Client上启用提供程序。
  4. 配置回调URI,OAuth响应类型和允许的范围。
  5. 访问托管用户界面,网址为https://www.auth..amazoncognito.com/login?client_id =& response_type =& redirect_uri =
  6. 点击按钮进入SignUp / SignIn with Facebook(或您的提供商)。
  7. 使用提供程序进行身份验证,您将被重定向到带有令牌/代码的回调URI。
  8. 在Amazon Cognito控制台中检查新创建的用户。