我已经能够为我正在测试的租户正确设置注册/登录策略。我已设置重置密码属性,以允许每个人使用他们的电子邮件重置密码。目前,用户使用他们的电子邮件(也是他们的用户名),名字和姓氏进行注册。
但是,当我点击登录页面上的“我忘记密码”链接时,它只会将我重定向回同一页面。这里有什么我想念的吗?
答案 0 :(得分:20)
Azure AD B2C中有两种不同的密码重置机制:
登录政策:应用程序无需工作,点击“我忘记了密码”将用户自动重定向到通用的Microsoft品牌密码重置页面。
注册/登录政策:这需要应用程序执行一些额外的工作。单击“我忘记了密码”将用户重定向回应用程序并显示错误代码。应用程序需要检测请求中的错误代码,然后进一步将用户重定向到Azure AD B2C密码重置策略。密码重置策略可以进行广泛的自定义。
详细介绍如何实现第二种方法,这里是挂钩到AuthenticationFailed通知并重定向到您自己的PasswordReset控制器操作的代码,来自B2C Sign-up/Sign-in quickstart, Startup.Auth.cs < / p>
private Task AuthenticationFailed(AuthenticationFailedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
{
notification.HandleResponse();
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");
}
else if (notification.Exception.Message == "access_denied")
{
// If the user canceled the sign in, redirect back to the home page
notification.Response.Redirect("/");
}
else
{
notification.Response.Redirect("/Home/Error?message=" + notification.Exception.Message);
}
return Task.FromResult(0);
}
这是代码PasswordReset控制器操作,它将用户重定向到密码重置B2C策略,来自同一B2C Sign-up/Sign-in quickstart, Account Controller
public void ResetPassword()
{
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties() { RedirectUri = "/" }, Startup.PasswordResetPolicyId);
}
}
为了完整起见,请务必查看full guide/overview of setting up an Azure AD B2C Sign-up/Sign-in Policy
答案 1 :(得分:3)
我遇到了同样的问题,提出了一个JavaScript解决方法,将“忘记密码” 网址直接指向“重置密码” 策略,您连接的网络应用程序中的代码(网络/移动/其他)
1。我假设您有3个标准策略,例如以下屏幕截图:
2。转到“注册和登录政策”并启用Javascript
a。单击您的“注册并登录策略”->属性
b。按照下面的屏幕截图
启用JavaScript3。 Microsoft article之后,它将指导您如何为“唱歌/注册”页面创建自定义UI
a。下载现成的模板(海洋蓝)以唱歌/注册(通过这种方式,它看起来比内置的经典旧版好得多;您也可以在其中更改背景和徽标) >
https://github.com/Azure-Samples/Azure-AD-B2C-page-templates/tree/master/ocean_blue
您还将在这里找到其他模板。
b。将此文件夹原样上传到任何托管服务器或Azure blob storage
c。只需确保为托管或Azure(easy way through Azure Storage Explorer)启用CORS
4。编写所需的Javascript。
添加所需的Javascript; 点击链接后,我们使用的是当前网址,即signsignup,将策略名称替换为重置策略,确保您将策略名称(不是我的)放在此处,或者如果使用相同的策略,则将其作为说明名称
<script>
$(function() {
console.log( "ready!" );
//Change Forget Password Text
$('#forgotPassword').html('Reset My Password');
//Handle Forget password click (fixing ADB2C error)
$( "#forgotPassword" ).click(function(e) {
e.preventDefault();
var oldUrl = window.location.href;
var newUrl = oldUrl.replace('B2C_1_signupsignin1','B2C_1_passwordreset1');
window.location.href = newUrl;
});
});
NB:如果我错过了任何步骤,请告诉我,我试图尽力而为。
答案 2 :(得分:0)
除了在Azure门户中为B2C实例选择“推荐”用户流之外,您还可以尝试使用“标准”用户流-尽管它看起来不像前者那么好。