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

Riz*_*Riz 18 azure-ad-b2c

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

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

Sac*_*aca 23

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

  1. 登录策略:应用程序无需工作,单击"我忘记密码"会自动将用户重定向到通用的Microsoft品牌密码重置页面.

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

详细了解如何实现第二种方法,这里是连接到AuthenticationFailed通知并重定向到您自己的PasswordReset控制器操作的代码,来自B2C注册/登录快速入门,Startup.Auth.cs

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);
}
Run Code Online (Sandbox Code Playgroud)

这里是代码PasswordReset控制器操作,它将用户重定向到密码重置B2C策略,来自相同的B2C注册/登录快速入门,帐户控制器

public void ResetPassword()
{
    if (!Request.IsAuthenticated)
    {
        HttpContext.GetOwinContext().Authentication.Challenge(
        new AuthenticationProperties() { RedirectUri = "/" }, Startup.PasswordResetPolicyId);
    }
}
Run Code Online (Sandbox Code Playgroud)

为了完整起见,请务必查看有关设置Azure AD B2C注册/登录策略完整指南/概述

  • 我仍然遇到此问题。我正在使用ADb2C登录到API管理开发人员门户。似乎单击“我忘记了密码”不会将用户重定向到应用程序。而是重定向到相同的登录表单。您可以在这里自己进行测试:http://agid-apim-test.portal.azure-api.net/我尝试将密码重置策略设置为API管理安全性身份设置,但没有成功。cc @saca (2认同)
  • UserVoice [直接从登录/注册到密码重置](https://feedback.azure.com/forums/169401-azure-active-directory/suggestions/33494830-go-direct-to-password-reset (从登录登录) (2认同)

Bis*_*nna 19

我遇到了同样的问题,并提出了一个 JavaScript 解决方法,将“忘记密码” url 直接指向“重置密码”策略,而无需更改连接的网络应用程序(网络/移动/任何)中的代码

1. 我假设您有 3 个标准策略,如下面的屏幕截图:

标准用户流程

2. 转到“注册和登录策略”并启用 Javascript

一种。单击“注册并登录策略”-> 属性

湾 按照下面的屏幕截图启用 JavaScript

启用 Javascript

3. 遵循Microsoft 文章,它将指导您如何为您的登录/注册页面创建自定义 UI

一种。下载现成的模板(海洋蓝)用于唱歌/注册(顺便说一下,它看起来比内置的经典旧模板 好得多;您也可以在其中更改背景和徽标)

https://github.com/Azure-Samples/Azure-AD-B2C-page-templates/tree/master/ocean_blue

在那里您也可以找到其他模板。

湾 将此文件夹按原样上传到任何托管或Azure blob 存储

C。只需确保为您的托管或 Azure 启用 CORS(通过 Azure 存储资源管理器的简单方法

4. 编写所需的 Javascript。

  • 根据屏幕将您的登录/注册策略指向您的模板 html在此处输入图片说明
  • 转到您的策略和运行工作流程,如果您看到它正在运行,请转到下一步
  • 添加所需的Javascript;单击链接后,我们将使用当前的 url,即注册,将策略名称替换为重置策略,确保将您的策略​​名称(不是我的)放在这里,或者如果您使用相同的策略,则将其保留为说明名字

    <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;
    
        });
    
      });
    
    Run Code Online (Sandbox Code Playgroud)

注意:如果我错过了任何一步,请告诉我,我尽量详细说明。

  • @Garisson,很高兴知道它已经解决了您的问题,是的,它是开箱即用的解决方案 (2认同)