Azure AD B2C 密码重置
Posted
技术标签:
【中文标题】Azure AD B2C 密码重置【英文标题】:Azure AD B2C Password Reset 【发布时间】:2019-07-14 05:44:35 【问题描述】:我正在尝试了解如何使用 。
似乎有多种方法可以处理密码重置。这些有什么区别?这些之间有价格差异吗?其中一些是 Azure AD 的功能,而另一些是 Azure AD B2C 的功能吗?为什么下面的方法 3 似乎不起作用?
通过 Azure B2C 用户流(策略)。
登录 v1 的策略转到下面的 AD 密码重置。 虽然所有其他政策都涉及 B2C 密码重置,但它允许用户通过存储在其用户配置文件中的主电子邮件地址重置密码。通过 Azure Active Directory 自助服务密码重置。可通过https://passwordreset.microsoftonline.com 访问。这允许用户通过存储在其个人资料中的任何电子邮件地址重置密码。
用户配置文件上的重置密码按钮。这提供了一个临时密码,但临时密码似乎不起作用。
【问题讨论】:
Related Github Issue 【参考方案1】:AAD B2C ≠ AAD ===> AAD B2C 用户≠ AAD 用户
目前,一般场景下我们只支持两种方式重置Azure AD B2C用户密码:
使用 Azure AD B2C 密码重置策略/用户流程的自助服务重置密码 (SSPR)。
管理员使用 Azure AD Graph API 帮助用户重置密码:https://docs.microsoft.com/en-us/previous-versions/azure/ad/graph/api/users-operations#reset-a-users-password--
回答您的问题:
这些有什么区别?是否有价格差异 在这些之间?其中一些是 Azure AD 的功能,而另一些是 Azure AD B2C 的功能?
密码重置策略/用户流程适用于 AAD B2C 用户。 您可以直接使用它。 AAD B2C 用户可以使用它自行重置密码。这也是一种SSPR。
Azure Active Directory 自助服务密码重置。通常,它适用于企业用户。由于this feature 仅用于 V1 登录用户流仅,我不建议您使用这种方式。
用户个人资料上的重置密码按钮。仅适用于 AAD(组织/企业)用户。不要为 AAD B2C 用户使用此按钮。
为什么下面的方法 3 似乎不起作用?
正如我在上面提到的,此功能仅适用于 Azure AD 用户。不是 AAD B2C 用户。因此,您无法在此处重置 B2C 用户的密码。
正如 Alex 所说,AAD B2C 用户不是 Azure AD 用户。 B2C 用户适用于 2c 场景。普通 Azure AD 用户用于组织/企业场景。
What's the difference between Azure AD B2C tenant and normal Azure AD tenant?What's the difference between Azure AD B2C tenant and normal Azure AD tenant?也可以参考我的回答
详细了解 B2C 密码重置政策的工作原理:
点击注册/登录策略中的“忘记密码”按钮后,AAD B2C 将向应用程序发送带有“AADB2C90118”的消息。
例如,在 ASP.NET MVC Web App 中,它应该挑战
private Task OnAuthenticationFailed(AuthenticationFailedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
notification.HandleResponse();
// Handle the error code that Azure AD B2C throws when trying to reset a password from the login page
// because password reset is not supported by a "sign-up or sign-in policy"
if (notification.ProtocolMessage.ErrorDescription != null && notification.ProtocolMessage.ErrorDescription.Contains("AADB2C90118"))
// If the user clicked the reset password link, redirect to the reset password route
notification.Response.Redirect("/Account/ResetPassword");
表示应用程序将/Account/ResetPassword
重定向到收到此消息后。
/Account/ResetPassword
在此处由 Account Controller 定义。它应该由您定义的密码重置策略名称确定。
public void ResetPassword()
// Let the middleware know you are trying to use the reset password policy (see OnRedirectToIdentityProvider in Startup.Auth.cs)
HttpContext.GetOwinContext().Set("Policy", Startup.ResetPasswordPolicyId);
// Set the page to redirect to after changing passwords
var authenticationProperties = new AuthenticationProperties RedirectUri = "/" ;
HttpContext.GetOwinContext().Authentication.Challenge(authenticationProperties);
return;
然后用户将被重定向到 B2C 密码重置策略以更改其密码。
【讨论】:
非常有帮助,谢谢。关于“为您的客户设置自助密码重置”一文。它仅适用于 V1 登录用户流。这将显示Can't access your account?
,并指向passwordreset.microsoftonline.com。我测试的所有其他策略都进入 B2C 密码重置流程。
是的 - 使用 V2 登录流程。这使用B2C重置密码,您可以自定义页面。
嗨@JamesWood,nzpcmad,啊哈......谢谢你的提醒。是的,该 SSPR 仅适用于 V1 登录用户流仅。我已经更新了我的答案~~
有没有办法使用 Microsoft graph API 重置 Azure AD B2C 用户的密码?我试过这种类型的查询它不起作用(docs.microsoft.com/en-us/graph/api/…)
@Rahul,AFIAK,您目前无法使用 MS Graph 重置 AAD B2C 用户的密码。您仍然需要使用 AAD Graph API 来执行此操作。【参考方案2】:
我的经验,假设您的 B2C 租户名为 contoso.onmicrosoft.com 或只是 contoso.com 的示例:
如果您通过登录策略注册 fooaccount@gmail.com 或 baraccount@otherAAD.com,则只能通过密码重置策略更改密码。即使您的帐户属于另一个 AAD,您也只有该租户的密码。 如果您在 B2C 租户中手动创建帐户,例如myawesomeaccount@contoso.com,您只能通过经典的 AAD 方法重置密码。在您的情况下,这将是 2) 并且可能是 3)。您使用相同的密码登录 B2C 应用程序。根据我的经验,唯一真正的方法是使用用户流(策略)。其他两个仅适用于特定于相关 B2C 目录的帐户。
您必须考虑,在 B2C 场景中,用户的电子邮件地址也可能属于完全不同目录(经典 B2B)中的“普通”AAD 用户。两个租户/目录并不真正了解彼此。即使它不是 AAD 帐户,它也可能属于多个不同 B2C 租户中的用户。每个人都有一个单独的密码。
【讨论】:
以上是关于Azure AD B2C 密码重置的主要内容,如果未能解决你的问题,请参考以下文章
Azure AD B2C 自定义密码重置策略不会使用 + char\sign 验证电子邮件
用户流的AD B2C forceChangePasswordNextLogin“登录v2”不会启动密码重置并阻止成功登录