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, {
..
})
成功时
- 我存储身份、访问和刷新令牌,因此,用户
不必每次都输入他的凭据
- 因为用户将访问 AWS 服务(例如 S3)我将 idToken 交换为 AWS 凭证
- 在访问资源时将 AWS 凭证存储在 LocalStore 中以供进一步使用
2) 对于 facebook 登录,我使用联合身份
- 获取 Facebook 访问令牌
- 使用 fb 令牌获得 Cognito 身份
- 将 Cognito 身份交换为 AWS 凭证并将其存储在 LocalStore
问题:
Q1。 sign-up/sign-in 是否有效且相当完整的逻辑?我错过了什么吗?
Q2。我应该如何存储 facebook 用户?我可以在用户池中执行吗?我觉得这是不可能的,但这意味着我有 2 个不同的用户目录:一个在 UserPool 中,另一个在另一个地方(比如在 DynamoDB 中)
Q3。如果我必须将用户存储在不同的地方(UserPool 和 DynamoDB),这意味着我有 2 个用户基本上是一个用户,他们首先在 email/password 注册然后决定使用 facebook - 这对我作为应用程序管理员来说都是不便的和用户。这种情况怎么处理?
Q4。如何为使用 facebook 令牌登录的用户(如用户、版主、管理员、创建者等)管理群组?
Q5。我应该如何限制 Facebook 登录用户访问 AWS 以外的资源?
Q6。有任何工作示例吗?
谢谢!
我是人,可能错过了一些东西,但这对我来说听起来不错。
您不能在用户池中存储联合身份登录。用户池作为另一个身份提供者,就像 Facebook 一样。 Dynamo(或其他东西)将是可行的方法。
如果用户使用这两种登录方式登录,linking 这些登录方式,您可能需要考虑完全避免使用用户池属性,而只使用 dynamo。使用两次登录 linked,Cognito 联合身份只需要一个登录令牌即可继续,但用户池需要它的登录令牌到 see/update 属性。用户必须使用用户池登录才能访问这些属性,这会变得很混乱。
- 我不知道这是开箱即用的支持,就像用户池一样。您可能必须使用上述假设的用户数据库来执行此操作。
- 您还可以 link 将您的用户池作为提供商提供给 Cognito,就像您为 Facebook 做的那样。这就是您用 id 令牌交换凭据的方式。
- 该服务没有官方示例,但我不能代表其他人。
我们为用户池添加了对 Federation through Facebook, Google and LoginWithAmazon 的支持。当用户使用联合登录时,这将在用户池中创建一个用户。您还可以使用属性映射功能从身份提供者捕获属性。
此外,如果您使用应用程序集成功能,Amazon Cognito 用户池将为您生成一个这样的登录页面。
通过 Amazon Cognito 控制台与社交提供商 SignIn/SignUp 的步骤:
- 为您的用户池配置域,如 .auth..amazoncognito.com
- 添加任何社交提供者并配置属性映射。
- 在 App Client 上启用提供程序。
- 配置回调 URI、OAuth 响应类型和允许的范围。
- 在 https://.auth..amazoncognito.com/login?client_id=&response_type=&redirect_uri= 访问您托管的 UI
- 点击按钮 SignUp/SignIn 与 Facebook(或您的供应商)。
- 向提供商进行身份验证,您将被重定向到 tokens/code 的回调 URI。
- 在 Amazon Cognito 控制台中检查新创建的用户。
我想集成一个非常标准的功能:让用户(移动和网络)选择使用 email/password 或 facebook (google) 帐户登录 RBAC(不同的用户可能有不同的角色,如用户、版主、管理员、创建者等)。这基本上是我想要登录的内容:
我浏览了许多 AWS 教程和其他材料。我对如何实施它有了一些了解,但我仍然没有全貌。希望有人能在这里帮助我。
这是我目前的理解(不对的地方请指正)。
1) 对于 email/password signup/signin 我使用了一个用户池。当用户登录时,我调用 authenticateUser(我使用的是 JS SDK):
cognitoUser.authenticateUser(authenticationDetails, {
..
})
成功时
- 我存储身份、访问和刷新令牌,因此,用户 不必每次都输入他的凭据
- 因为用户将访问 AWS 服务(例如 S3)我将 idToken 交换为 AWS 凭证
- 在访问资源时将 AWS 凭证存储在 LocalStore 中以供进一步使用
2) 对于 facebook 登录,我使用联合身份
- 获取 Facebook 访问令牌
- 使用 fb 令牌获得 Cognito 身份
- 将 Cognito 身份交换为 AWS 凭证并将其存储在 LocalStore
问题:
Q1。 sign-up/sign-in 是否有效且相当完整的逻辑?我错过了什么吗?
Q2。我应该如何存储 facebook 用户?我可以在用户池中执行吗?我觉得这是不可能的,但这意味着我有 2 个不同的用户目录:一个在 UserPool 中,另一个在另一个地方(比如在 DynamoDB 中)
Q3。如果我必须将用户存储在不同的地方(UserPool 和 DynamoDB),这意味着我有 2 个用户基本上是一个用户,他们首先在 email/password 注册然后决定使用 facebook - 这对我作为应用程序管理员来说都是不便的和用户。这种情况怎么处理?
Q4。如何为使用 facebook 令牌登录的用户(如用户、版主、管理员、创建者等)管理群组?
Q5。我应该如何限制 Facebook 登录用户访问 AWS 以外的资源?
Q6。有任何工作示例吗?
谢谢!
我是人,可能错过了一些东西,但这对我来说听起来不错。
您不能在用户池中存储联合身份登录。用户池作为另一个身份提供者,就像 Facebook 一样。 Dynamo(或其他东西)将是可行的方法。
如果用户使用这两种登录方式登录,linking 这些登录方式,您可能需要考虑完全避免使用用户池属性,而只使用 dynamo。使用两次登录 linked,Cognito 联合身份只需要一个登录令牌即可继续,但用户池需要它的登录令牌到 see/update 属性。用户必须使用用户池登录才能访问这些属性,这会变得很混乱。
- 我不知道这是开箱即用的支持,就像用户池一样。您可能必须使用上述假设的用户数据库来执行此操作。
- 您还可以 link 将您的用户池作为提供商提供给 Cognito,就像您为 Facebook 做的那样。这就是您用 id 令牌交换凭据的方式。
- 该服务没有官方示例,但我不能代表其他人。
我们为用户池添加了对 Federation through Facebook, Google and LoginWithAmazon 的支持。当用户使用联合登录时,这将在用户池中创建一个用户。您还可以使用属性映射功能从身份提供者捕获属性。
此外,如果您使用应用程序集成功能,Amazon Cognito 用户池将为您生成一个这样的登录页面。
通过 Amazon Cognito 控制台与社交提供商 SignIn/SignUp 的步骤:
- 为您的用户池配置域,如 .auth..amazoncognito.com
- 添加任何社交提供者并配置属性映射。
- 在 App Client 上启用提供程序。
- 配置回调 URI、OAuth 响应类型和允许的范围。
- 在 https://.auth..amazoncognito.com/login?client_id=&response_type=&redirect_uri= 访问您托管的 UI
- 点击按钮 SignUp/SignIn 与 Facebook(或您的供应商)。
- 向提供商进行身份验证,您将被重定向到 tokens/code 的回调 URI。
- 在 Amazon Cognito 控制台中检查新创建的用户。