You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

B2C自定义策略:如何在登录流程取消步骤后将用户重定向回应用并触发OnAuthenticationFailed事件?

解决方案:在B2C登录取消时重定向回应用并触发认证失败事件

针对你的需求,我们可以通过ASP.NET Core OpenID Connect中间件的事件处理结合Azure AD B2C的错误响应机制来实现,完全不需要依赖JavaScript重定向,同时支持多redirect URI的场景。以下是具体步骤:

1. 理解B2C的取消登录响应

当用户在B2C登录流程中取消操作时,B2C会返回标准的OpenID Connect错误响应,其中包含error=access_denied和error_description=User canceled the authentication。我们可以捕获这个错误来触发自定义逻辑。

2. 配置OpenID Connect中间件的事件处理

在你的应用配置(.NET 6+用Program.cs,旧版本用Startup.cs)中,通过事件处理来识别取消场景,并重定向回原应用地址:

示例代码(.NET 6+)

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options =>
    {
        // 绑定B2C配置(从appsettings.json读取)
        builder.Configuration.Bind("AzureAdB2C", options);

        // 处理远程认证失败事件(包含用户取消登录的场景)
        options.Events.OnRemoteFailure = context =>
        {
            // 识别用户取消登录的错误
            if (context.Failure is OpenIdConnectProtocolException protocolEx && 
                protocolEx.Error == "access_denied")
            {
                // 获取发起认证时指定的redirect URI(自动适配多URI场景)
                var targetRedirectUri = context.Properties.RedirectUri ?? "/";
                
                // 重定向回你的应用
                context.Response.Redirect(targetRedirectUri);
                // 阻止默认的错误页跳转逻辑
                context.HandleResponse();
            }
            return Task.CompletedTask;
        };

        // 触发你需要的OnAuthenticationFailed事件(添加自定义逻辑)
        options.Events.OnAuthenticationFailed = context =>
        {
            // 这里可以添加日志记录、错误通知等逻辑
            // 比如:_logger.LogError("认证失败: {Message}", context.Exception.Message);
            return Task.CompletedTask;
        };
    });

3. 确保发起认证时传递正确的RedirectUri

在你的登录动作方法中,明确传递returnUrl作为认证的重定向目标,这样中间件才能在取消时正确返回原地址:

[HttpGet("Login")]
public IActionResult Login(string returnUrl = "/")
{
    // 保存原地址到认证属性中
    var authProperties = new AuthenticationProperties { RedirectUri = returnUrl };
    // 发起B2C认证挑战
    return Challenge(authProperties, OpenIdConnectDefaults.AuthenticationScheme);
}

4. 验证B2C应用注册的Redirect URI列表

确保所有可能的应用重定向地址都已添加到Azure AD B2C应用注册的重定向URI列表中,否则B2C会阻止非法的重定向请求。

关键说明

  • 这种方式完全基于服务器端处理,不需要任何前端JavaScript,完美适配多redirect URI的场景。
  • OnRemoteFailure事件专门用于处理远程认证服务(比如B2C)返回的失败,包括用户主动取消的情况。
  • 如果你的业务逻辑必须依赖OnAuthenticationFailed事件,也可以在该事件中捕获access_denied错误并处理重定向,效果一致。

内容的提问来源于stack exchange,提问作者matei.navidad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:08:12