Azure AD B2C自助密码重置链接不起作用

时间:2017-01-06 00:37:12

标签: azure-ad-b2c

我已经能够为我正在测试的租户正确设置注册/登录策略。我已设置重置密码属性,以允许每个人使用他们的电子邮件重置密码。目前,用户使用他们的电子邮件(也是他们的用户名),名字和姓氏进行注册。

但是,当我点击登录页面上的“我忘记密码”链接时,它只会将我重定向回同一页面。这里有什么我想念的吗?

3 个答案:

答案 0 :(得分:20)

Azure AD B2C中有两种不同的密码重置机制:

  1. 登录政策:应用程序无需工作,点击“我忘记了密码”将用户自动重定向到通用的Microsoft品牌密码重置页面。

  2. 注册/登录政策这需要应用程序执行一些额外的工作。单击“我忘记了密码”将用户重定向回应用程序并显示错误代码。应用程序需要检测请求中的错误代码,然后进一步将用户重定向到Azure AD B2C密码重置策略。密码重置策略可以进行广泛的自定义。

  3. 详细介绍如何实现第二种方法,这里是挂钩到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个标准策略,例如以下屏幕截图:

Standard User flows

2。转到“注册和登录政策”并启用Javascript

a。单击您的“注册并登录策略”->属性

b。按照下面的屏幕截图

启用JavaScript

Enable Javascript

3。 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。

  • 根据屏幕将您的登录/注册策略指向模板html enter image description here
  • 转到您的策略并运行工作流程,如果看到它可以正常工作,请继续下一步
  • 添加所需的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实例选择“推荐”用户流之外,您还可以尝试使用“标准”用户流-尽管它看起来不像前者那么好。