在 Azure AD B2C 中,我们如何在注册和登录时自动链接帐户?用户应该只有一个帐户

Posted

技术标签:

【中文标题】在 Azure AD B2C 中,我们如何在注册和登录时自动链接帐户?用户应该只有一个帐户【英文标题】:In Azure AD B2C, how can we account link automatically at sign up and sign in? User should only ever have one account 【发布时间】:2022-01-05 05:40:36 【问题描述】:

Azure B2C 示例策略(例如 Azure AD B2C account linkage at signup)提供了多种链接帐户的方法,但它们都依赖于用户在链接和取消链接帐户方面的输入,这可能会造成混淆。我相信一个常见的场景只是希望用户使用他们选择的任何方法进行身份验证,并拥有共同的体验。它应该尽可能简单。

社交帐户的任何链接和取消链接都可能是用户帐户管理的一部分,但不应成为登录的一部分。

在Azure AD B2C Auto Account Link 上扩展该场景将是:

场景 1

用户之前已使用本地帐户 (bob@contoso.com) 注册 用户使用 Facebook 登录,Facebook 返回电子邮件声明 - bob@contoso.com Facebook 身份合并到本地帐户中 用户已登录 用户被邀请使用其本地帐户登录

场景 2

用户之前已注册 Google (bob@contoso.com) 用户使用 Facebook 登录,Facebook 返回电子邮件声明 - bob@contoso.com Facebook 身份已合并到 Google 帐户中 用户已登录 用户被邀请使用其 Google 帐户登录

场景 3

用户之前已注册 Google (bob@contoso.com) 用户使用 bob@contoso.com 注册本地帐户(带有经过验证的电子邮件) 带密码的本地账号合并到原账号中 用户已登录(用户可以在以后使用本地帐户+密码登录) 用户出现错误,说明帐户存在 用户不应必须执行忘记密码流程

注意最后一种情况,建议原社交账号可以同时设置本地账号(随机密码);如果注册,用户将收到“此帐户已存在”错误,但可以执行重置密码。但是密码重置涉及重复与注册完全相同的步骤(确认您的电子邮件,提供您的密码)。


(之前的问题问过How do i link a social account with any existing local account during first time sign in from social login?,但没有涉及本地与社交的合并,如果不存在本地帐户则失败。)

【问题讨论】:

您好,就我而言,我只想使用 Google 和 Facebook 而不是本地帐户登录。能否请您对此提出一些想法? 【参考方案1】:

要实现场景 1/2 的版本,请删除 HandleLinkLocalToSocial 子路径中的步骤 1-7。

场景 3 需要做更多的工作。需要先检测账号是否存在,如果已经存在则写入账号不报错。

我根据示例进行帐户链接的原因是为了防止劫持某人的帐户,例如他们使用 MFA 的 Google,但使用弱密码的 Facebook。用户使用 Google 注册,但攻击者使用 Facebook 登录劫持了该帐户。用户认为这是安全的,因为他们使用 2FA for Google,但忘记了他们的 FB 登录很弱。

【讨论】:

谢谢,是的,我同意不同场景的安全级别不同。我已经实现了您的“Azure AD B2C 帐户关联”示例,并且也成功添加了 Google 提供商;然后我按照您的建议删除了这些步骤。场景 1 和 2 一切正常(虽然这里有一个明显的错误需要修复 github.com/azure-ad-b2c/samples/blob/…) - 我会尝试场景 3,但怀疑它很复杂。 为了兼容快速部署功能,我保留了与 Facebook 相同的键名。将在自述文件中提及以适当地更新这些键名。 我明白了,谢谢。关于第 3 步(将本地注册合并到现有帐户) - 如果我确保设置了 True,那么这将满足确保用户是他们所说的人的要求是。所以我尝试的是在 AAD-UserWriteUsingUserIdentity 配置文件中将 RaiseErrorIfClaimsPrincipalAlreadyExists 设置为 false,但它仍然返回“具有指定 ID 的用户已经存在”错误。 事实上,我几乎是正确的。关键是在 AAD-UserWriteUsingLogonEmail 技术配置文件上将 RaiseErrorIfClaimsPrincipalAlreadyExists 设置为 false。我会写一个更完整的答案并链接到更新后的 AccountLinkExtensions.xml 是的,但是如果您直接在那里更新,所有用户都可以再次注册……所以您想要复制并仅在 account exists and extension_haspassword=false 时调用您的新版本。

以上是关于在 Azure AD B2C 中,我们如何在注册和登录时自动链接帐户?用户应该只有一个帐户的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure AD B2C 中管理用户流之间的单个帐户/会话

使用 Azure AD B2C 在注册期间添加帐户 ID

如何通过 Azure AD B2C 使用身份验证功能在 Azure Web App 上添加身份验证?

Azure AD B2C 自定义策略

我们如何在 Xamarin 表单中删除/自定义 Azure AD B2C 身份验证 webview 页面标题栏?

如何使用 Azure AD B2C 获取 Facebook 个人资料图片