我想整合一个非常标准的功能:为用户(移动和网络)提供选项,使用电子邮件/密码登录或使用RBAC的Facebook(谷歌)帐户(不同的用户可能有不同的角色,如用户,版主,管理员,创作者等)。这基本上是我想要登录的:
我浏览了许多AWS教程和其他材料。我掌握了如何实现它,但我仍然没有完整的图片。希望有人可以帮助我。
这是我目前的理解(请在我错的地方纠正我)。
1)对于电子邮件/密码注册/登录,我使用用户池。当用户登录时,我调用authenticateUser(我正在使用JS SDK):
cognitoUser.authenticateUser(authenticationDetails, {
..
})
其中onSuccess
2)对于facebook登录,我使用联合身份
Q1。注册/登录是否有效且相当完整?我错过了什么吗?
Q2。我应该如何存储Facebook用户?我可以在用户池中执行此操作吗?我的印象是它不可能,但这意味着我有2个不同的用户目录:一个在UserPool中,另一个在另一个地方(比如说在DynamoDB中)
Q3。如果我必须将用户存储在不同的地方(UserPool和DynamoDB),这意味着我基本上只有一个用户有2个用户,他们首先使用电子邮件/密码注册然后决定使用Facebook - 这对我作为应用管理员和用户都不方便。如何应对这种情况?
Q4。如何管理使用facebook令牌登录的用户组(如用户,版主,管理员,创建者等)?
Q5。对于Facebook登录用户,我应该如何限制对AWS以外的资源的访问?
Q6。这有什么实际的例子吗?
谢谢!
答案 0 :(得分:4)
我是人,可能错过了什么,但这对我来说听起来不错。
您无法在用户池中存储联合身份登录。用户池作为另一个身份提供者,就像Facebook一样。迪纳摩(或其他东西)将是最佳选择。
如果用户使用两者登录,并链接这些登录,您可能需要考虑完全避免用户池属性并仅使用dynamo。通过链接两个登录,Cognito联合身份只需要一个登录令牌即可继续,但用户池需要它的登录令牌才能查看/更新属性。用户必须使用用户池登录才能触摸这些属性,它会变得混乱。
答案 1 :(得分:4)
我们为用户池添加了对Federation through Facebook, Google and LoginWithAmazon的支持。当用户使用联盟登录时,这将在用户池中创建用户。您还可以使用属性映射功能从身份提供程序捕获属性。
此外,如果您使用应用集成功能,Amazon Cognito用户池将为您生成这样的登录页面。
通过Amazon Cognito Console与社交提供商签名/签名的步骤: