在.Net核心Web Api中使用Azure B2C处理密码重置

在.Net核心Web Api中使用Azure B2C处理密码重置,.net,azure,authentication,.net-core,asp.net-core-webapi,.net,Azure,Authentication,.net Core,Asp.net Core Webapi,我正在构建一个允许用户登录或注册Azure B2C的web API。我正在使用“注册”或“登录”策略,这会给我一个“忘记密码”链接。单击此链接会给我一个被拒绝的访问,错误描述为AADB2C90118 如何在web API中处理此错误 注意:我正在使用a作为登录/注册表单。请查看 请注意,这主要表明当发生此错误时,应用程序需要执行重定向。不确定您希望API扮演什么角色 具体查找您提到的错误代码AADB2C90118: Conroller处理重置的操作: 下面是一些代码: options =

我正在构建一个允许用户登录或注册Azure B2C的web API。我正在使用“注册”或“登录”策略,这会给我一个“忘记密码”链接。单击此链接会给我一个被拒绝的访问,错误描述为AADB2C90118

如何在web API中处理此错误

注意:我正在使用a作为登录/注册表单。

请查看

请注意,这主要表明当发生此错误时,应用程序需要执行重定向。不确定您希望API扮演什么角色

具体查找您提到的错误代码AADB2C90118:

Conroller处理重置的操作:

下面是一些代码:

 options = new OpenIdConnectAuthenticationOptions
        {
            Notifications = new OpenIdConnectAuthenticationNotifications()
            {
                AuthenticationFailed = context =>
                {
                    context.HandleResponse();

                    if (context.ProtocolMessage.Error == "access_denied" && context.ProtocolMessage.ErrorDescription.StartsWith("AADB2C90118"))
                    {
                        context.Response.Redirect("/Account/ResetPassword");
                    }


您是否定义并配置了密码重置策略?执行此操作时,请确保在重置策略中启用了您正在使用的身份提供程序。是的,我已经定义并配置了密码重置策略,并且启用了重置策略。不确定使用OpenId将如何与我设置API的方式配合使用。我正在使用Jwt承载中间件来处理令牌验证,但样本似乎没有使用它。基本上,我如何处理这个示例中的错误代码和重定向?请尝试在startup.cs中调试AuthenticationFailed,或者查看JwtOptions的其他事件。但是您可能需要更改应用程序本身来处理错误,我假设您不仅仅有一个api和登录屏幕?
        var openIdConnectAuthenticationOptions = new OpenIdConnectOptions
        {
 [...]
            Events = new OpenIdConnectEvents
            {

                OnRemoteFailure = context =>
                {
 [...]
                    // Handle the error that is raised when a user has requested to recover a password.
                    if (!string.IsNullOrEmpty(context.Failure.Message) &&
                        context.Failure.Message.Contains("access_denied") &&
                        context.Failure.Message.Contains("AADB2C90118"))
                    {
                        context.Response.Redirect($"/Account/RecoverPassword?ReturnUrl={context.HttpContext.Items["redirect_uri"]}");
                        context.HandleResponse();
                    }