【问题标题】:Import Facebook users into AWS Cognito将 Facebook 用户导入 AWS Cognito
【发布时间】:2017-09-22 14:50:25
【问题描述】:

我是 AWS Cognito 的新手,所以我可能会错误地处理这个问题,但从根本上说,我想从 Facebook 将用户导入 Cognito 用户池。因此,用户会为访问我的 Web 应用程序付费,然后我想将他们作为有效用户从 Facebook 导入到我的用户池中。

所以我的问题是:如何从 Facebook 导入它们?如何告诉 AWS 我想将 Facebook ID 为 XYZ 的用户添加到我的池中?

是的,我确实意识到这将我的用户限制为拥有 Facebook 帐户的用户,但对于我的用例来说,这是绝对可以接受的。我也意识到这是多么手动和不可扩展,但这对于我的特定用例也是可以接受的。

【问题讨论】:

  • 从 FB 登录创建 Userpool 用户并不是使用 Cognito 对 FB 进行身份验证的目的。对于此流程,您需要编写一个 API 后端以在 FB 身份验证成功后在后端验证 FB 令牌来创建用户池用户。
  • 必须有某种方式让用户的社交登录绑定到用户认知池。如果您只是在 fb 登录后将用户发布到用户池,您可以创建具有联合身份 ID 的 cognito 用户池用户,然后当该用户使用相同的社交登录名返回时,您能否为该用户生成一个成功登录到 cognito 用户池?

标签: amazon-web-services amazon-cognito


【解决方案1】:

这个问题提出已经 4 年了,所以我想我的回复只会帮助像我这样有同样问题的人。而对于

不幸的是,我找不到导入 Facebook、Google 或任何其他联合身份提供者的方法,但我找到了一种棘手的方法来实现相同的结果,但不完全导入,它将结合以下两个Cognito 的 API:AdminCreateUser 和 AdminLinkProviderForUser。所以主要的想法是:创建一个“Cognito 用户持有者”并将其 Facebook 用户链接到这个 Cognito 用户。

这个解决方案的一些缺点是,根据您对 Cognito 池用户名和必填字段的选择,您最终需要伪造这些值才能创建“Cognito 用户持有人”。此外,以这种方式创建用户(使用 AdminCreateUser API 和伪造数据),您可能需要使用 API AdminConfirmSignUp“手动”确认用户,使用 API AdminSetUserPassword 设置永久密码并使用自动确认电子邮件Pre sign-up Lambda trigger

一个基于 Java 的存根代码来说明这个想法是:

 val adminCreateUserResponse = cognitoClient.adminCreateUser(
        AdminCreateUserRequest
            .builder()
            .userPoolId($poolId)
            .username($fakeEmailBasedOnSocialProviderAndSocialProviderId)
            .messageAction("SUPPRESS")
            .build()
    )
    cognitoClient.adminLinkProviderForUser(
        AdminLinkProviderForUserRequest.builder()
            .userPoolId($poolId)
            .sourceUser(
                ProviderUserIdentifierType.builder()
                .providerName($socialProvider)
                .providerAttributeName("Cognito_Subject")
                .providerAttributeValue($socialProviderId).build())
            .destinationUser(
                ProviderUserIdentifierType.builder()
                .providerName("Cognito")
                .providerAttributeValue($adminCreateUserResponse.user().username())
                .build())
        .build())

我可以验证这个理论,并且可以使用我的 Facebook 帐户成功验证用户身份。

【讨论】:

  • 但我会问“你真的需要将用户导入 Cognito Pool 吗?”还是让用户再次通过 Facebook 注册就可以了?我这样问是因为当用户通过 Facebook 注册时,他在 Congito 上的“子”字段将是“Facebook_${FacebookId}”。就我而言,我的后端使用此字段将 Cognito 的用户绑定到我的用户,我只是导入我的“后端用户”记录,其中“cognitoUserSub”等于“Facebook_${FacebookId}”并等待用户再次通过 Facebook 注册,所以一旦我得到他的 access_token,我会将 access_token “sub”与我的后端用户记录匹配
猜你喜欢
  • 2021-07-30
  • 2019-09-13
  • 2019-05-18
  • 2018-05-16
  • 2018-08-23
  • 1970-01-01
  • 2017-10-30
  • 2020-05-10
  • 2021-03-18
相关资源
最近更新 更多