Azure AD B2C 自助服务密码重置链接不起作用 [关闭]

Posted

技术标签:

【中文标题】Azure AD B2C 自助服务密码重置链接不起作用 [关闭]【英文标题】:Azure AD B2C self service password reset link doesn't work [closed] 【发布时间】:2017-05-20 17:05:14 【问题描述】:

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

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

【问题讨论】:

关于 gpilotino 的重置密码点重定向回登录页面 - 我发现我没有密码重置 url 的完全限定路径,以及组合登录/注册导致这种情况发生.一旦我给出了一个完全合格的 url(从发布中调试差异),它就可以正常工作。 奇怪这个问题已经结束了。如果你使用 Azure B2C,那么问题出在哪里就很清楚了。无论如何,此示例策略也可能会有所帮助:github.com/azure-ad-b2c/samples/tree/master/policies/… 【参考方案1】:

除了在 Azure 门户中为 B2C 实例选择“推荐”用户流之外,您还可以尝试使用“标准”用户流 - 尽管它看起来不像前者那么好。

【讨论】:

【参考方案2】:

我遇到了同样的问题,并想出了一个 javascript 解决方法,将 “忘记密码” url 直接指向 “重置密码” 策略而不进行更改您连接的网络应用程序中的代码(网络/移动/其他)

1.我假设您有 3 个标准策略,如下图所示:

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

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

b.根据下面的屏幕截图启用 JavaScript

3.在Microsoft article 之后,它将指导您如何为您的登录/注册页面创建自定义 UI

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

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。

根据 screen 将您的登录/注册策略指向您的模板 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;

    );

  );

N.B:如果我遗漏了任何步骤,请告诉我,我尽量详细说明。

【讨论】:

当您尝试尽可能多地使用开箱即用的流程并且不需要在应用程序中运行任何自定义代码时,这是一个很好的答案。感谢分享,对我来说效果很好! @Garisson,很高兴知道它已经解决了您的问题?,是的,它是开箱即用的解决方案 谢谢,只需要另一个处理程序来处理“发送验证”页面中的取消链接。 @ChrisGunawardena - 你不需要特别处理。这个 url 是你在 flow 中设置的回调 url,然后你在 flow 的 url 中拥有它。 docs.microsoft.com/en-us/azure/active-directory-b2c/… 说不要在“”(#forgotPassword)上绑定点击事件【参考方案3】:

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

    登录策略:应用程序不需要任何工作,点击“我忘记了密码”会将用户自动重定向到通用的 Microsoft 品牌密码重置页面。

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

详细介绍如何实现第二种方法,这里是连接到 AuthenticationFailed 通知并重定向到您自己的 PasswordReset 控制器操作的代码,来自B2C Sign-up/Sign-in quickstart, 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);

这是代码 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

【讨论】:

@nhwilly 使用 Microsoft 推荐的 AppAuth-ios 库(或 AppAuth-android)及其 OIDAuthState.authState(byPresenting:presenting:callback:) 方法,然后当用户点击“我忘记密码”时在 web 视图中,您的用户应该被重定向回您的应用程序(使用您提供的重定向 URI),并且在您定义的回调中,您应该得到一个 nil authState 和一个错误。该错误将包含代码“AADB2C90118”。如果你检测到这一点,你就知道你现在需要重定向到上面提到的重置密码页面。 我仍然遇到这个问题。我正在使用 ADb2C 登录 API 管理开发人员门户。看起来单击“我忘记了密码”不会将用户重定向回应用程序。它改为重定向到相同的登录表单。您可以在这里自行测试:agid-apim-test.portal.azure-api.net 我尝试在 API 管理安全身份设置中设置密码重置策略,但没有成功。抄送@saca 这对我不起作用?当我在操作方法中设置密码重置策略时,我只是一直被路由到相同的登录/注册策略。有什么想法吗? 知道如何在 MSAL 中为角度应用捕获响应吗? 用户语音Go Direct to Password Reset from Sign-In/Sign-Up

以上是关于Azure AD B2C 自助服务密码重置链接不起作用 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Azure AD B2C 自定义密码重置策略不会使用 + char\sign 验证电子邮件

Azure b2c 忘记密码链接不起作用

Azure AD B2C OpenIdConnect ConfigurationManager 错误

自助重置AD域用户密码_如何更好的对AD域用户密码进行管理

Azure AD B2C 连接的用户使用 Graph AD API 更改密码

Azure AD B2C:自定义策略 - 登录不起作用