在 AAD B2C 中更改登录名

Posted

技术标签:

【中文标题】在 AAD B2C 中更改登录名【英文标题】:Changing sign-in name in AAD B2C 【发布时间】:2020-05-28 11:53:33 【问题描述】:

我正在尝试从 AAD B2C 示例中实现 Change Sign-in Name flow。基本上该策略有效,但问题是用户在更改电子邮件后仍处于登录状态。

据我了解,更改主要身份必须立即使所有已发布的令牌/会话无效,并强制用户重新进行身份验证。为什么这可以是安全的,并且在示例中没有解决?我该怎么做?我可以将请求重定向到 B2C 注销端点,但这是另一个问题:

当用户单击“更改登录名”链接时,他会被重定向到具有指定 redirect_uri 查询字符串参数的策略端点。就我而言,它是https://localhost:44300。问题是,当他完成流程时,当他取消流程时,他会被重定向回我的网站,而我无法区分这两者,因为请求中似乎没有要检查的内容。

那么,如果用户取消流程(电子邮件未更改),我如何让用户回到https://localhost:44300,并在他完成流程后执行单点注销?

【问题讨论】:

【参考方案1】:

为什么更改用户名会使会话无效?我只能同意更改密码。 B2C 不了解正在发生的事情(密码更改除外),它只是按照您的要求进行操作。所有旅程最后都会发出一个令牌,您可以放置​​一个自声明页面并禁用继续按钮,然后使用 javascript 将用户发送到应用程序的注销路径(如果这是您想要的)。

在成功的策略执行中,您会得到一个带有唯一策略 id 的令牌。

如果失败,您会收到一个错误发送到应用程序。使用它来区分它们。

要管理用户取消,请发送一个编码状态参数和身份验证请求,它将返回“取消错误”(AADB2C 错误用户取消“到您的应用程序,然后注销。看起来用户体验很差并且没有安全收益。

【讨论】:

用户更改他的 UPN 后,我们无法保证他仍然拥有该 UPN。因此,迄今为止发行的所有代币都不再受信任。对外部系统的查找可能会失败或返回其他人的数据。 感谢状态参数的想法,不知怎的错过了! 如果您让用户在更改登录过程中验证新电子邮件,您可以而且应该这样做,我看不出问题。旅程完成后,用户将获得一个带有新 signInName 的令牌。现状。 是的,但是旧电子邮件的旧令牌仍然有效,不是吗? 是的。强制在一台设备上注销不会改变这一点。事实上,您无能为力会使 id/access 令牌无效。只有 B2C SSO Web 会话 cookie 在本地计算机上通过强制注销来销毁。刷新令牌可以失效,但在这种情况下它不会再次取得太大成就,人们不会为此更改登录名。【参考方案2】:

这是一个很好的问题。生成令牌时,它具有设定时间的生命周期。例如 1 小时。

当您使用此令牌时,假定用户可以继续使用,直到令牌过期并颁发刷新令牌。

当刷新令牌被消耗时,将发生新的验证并且需要重新验证。

【讨论】:

以上是关于在 AAD B2C 中更改登录名的主要内容,如果未能解决你的问题,请参考以下文章

Azure B2C 自定义 - 更改“使用您的社交帐户登录”文本

如何使用Azure AD B2C在react-aad-msal中使用“忘记密码”?

Azure Active Directory B2C - 更改通知

更改 Azure AD B2C 访问令牌生命周期不起作用

AAD B2C 中具有客户端凭据授予流的 Azure 应用服务轻松身份验证

python 将Json Web Keys(JWK)下载并组合到一个JWK中,用于所有指定的Azure Active Directory B2C(AAD B2C)策略。