AWS Cognito 将用户切换到联合账户

AWS Cognito Switch User to Federated Account

我想允许用户使用用户池身份(电子邮件地址 + 密码)或 Facebook 联合身份进行注册。

但我也希望他们以后能够切换:如果他们最初没有使用 Facebook 注册,则添加 Facebook 联盟,或者如果他们最初注册,则从他们的帐户中删除 Facebook link使用 Facebook。

这可能吗?

提前致谢!

是的,是的。我假设 Facebook 作为 IdP 直接添加到用户池中。

将您的查询分成两部分:

1.用户使用用户名和密码注册。稍后,他想link他的Facebook帐号
这很容易。在 UI 中提供一个选项并使用 AdminLinkProviderForUser API to link Facebook/Google account to the user. Now, when the user signs in using this Facebook/Google account next time, Cognito will treat it as the native user & generate token for the same. Of course, the Facebook info will be mentioned in the identities claim. If the user wants to remove this Facebook/Google link later, it is possible using the AdminDisableProviderForUser API 调用。

2。用户使用 Facebook
注册 这有点棘手,因为 Facebook 登录会自动在您的用户池中创建一个状态为 EXTERNAL_PROVIDER 的用户(与具有 CONFIRMED 状态的本机用户不同)。顾名思义,该用户只能使用相关的外部提供商登录 - 在本例中为 Facebook。如果用户想使用用户名密码登录,则必须使用 SignUp API 或 AdminCreateUser API 创建一个新帐户。此外,此帐户不能使用 AdminLinkProviderForUser linked 到以前的 Facebook 帐户,因为先决条件是用户池中不应存在具有相同详细信息(电子邮件等)的 Facebook 用户。但此刻,我们有一个自动创建的 Facebook 用户,状态为 EXTERNAL_PROVIDER。

因此,简而言之,您必须 - 使用 SignUp 或 AdminCreateUser API 创建新用户,删除自动创建的 Facebook 用户,最后 link Facebook 帐户,以防万一1.