使用Cognito和Google IdP联合身份认证的最佳方法

0

【以下的问题经过翻译处理】 我正试图在Cognito中设置谷歌验证。我添加了一个注册触发器来链接账户,但链接时会抛出一个“user already exists error”。

我的主要目标是为用户提供通过谷歌或用户名/电子邮件登录的选项,或两者皆可。我正在使用的方法如下:https://bobbyhadz.com/blog/aws-cognito-link-user-accounts 有一些小的代码调整,但主要流程相同。

谁知道为什么会出现这个错误?如果我没有得到这个错误,我可以轻松使用这个方法。如果大家使用了不同的方法,请分享您的想法和思路。

profile picture
专家
已提问 5 个月前1 查看次数
1 回答
0

【以下的回答经过翻译处理】 你好,

在Cognito中的账户链接的双方必须是一个已存在的本地用户和一个不存在的外部身份。如果外部身份已经存在于用户池中,你必须首先使用AdminDeleteUser删除该外部身份,然后使用AdminLinkProviderForUser API将本地用户链接到外部身份。在所有情况下,你都需要在客户端做错误处理,也就是从pre-signup触发器接收一个错误然后重试sign-in。因为用户已经有与外部提供商的现有会话,重新尝试登录应该能够无缝地允许外部用户作为本地用户进行登录。

请确保从安全角度正确审查您的流程,如果您为本地用户生成临时密码,请确保使用难以猜测的强随机密码,理想情况下,在帐户链接的场景下您应该在链接之前进行帐户验证。例如,在预注册期间,您检测到用户已经拥有本地帐户,然后使用自定义工作流向电子邮件地址发送链接请求,只有当该链接被点击(即验证该邮件所有者是同一人并批准链接)后,您应该使用AdminLinkProviderForUser链接帐户。或者,如果你从外部提供商收到email_verified为true的标志,那么将两个身份链接在一起是安全的,不要链接未验证电子邮件的身份。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则