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

Blazor 8 Web App:使[Authorize] API端点返回403而非登录页

解决Blazor 8 API端点未认证返回登录页问题

核心问题是Blazor默认的Cookie认证会对所有未认证请求重定向到登录页,包括API请求。我们需要通过修改认证事件,区分API路径和Blazor页面路径,分别处理未认证请求。

步骤1:修改Cookie认证事件配置

在Program.cs的服务注册部分,为Cookie认证添加路径判断逻辑,当请求路径以/api开头时,返回401/403状态码而非重定向:

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        // Blazor页面的登录跳转配置
        options.LoginPath = "/login";
        options.AccessDeniedPath = "/access-denied";

        // 处理未认证的API请求:返回401
        options.Events.OnRedirectToLogin = context =>
        {
            if (context.Request.Path.StartsWithSegments("/api"))
            {
                context.Response.StatusCode = StatusCodes.Status401Unauthorized;
                return Task.CompletedTask;
            }
            context.Response.Redirect(context.RedirectUri);
            return Task.CompletedTask;
        };

        // 处理权限不足的API请求:返回403
        options.Events.OnRedirectToAccessDenied = context =>
        {
            if (context.Request.Path.StartsWithSegments("/api"))
            {
                context.Response.StatusCode = StatusCodes.Status403Forbidden;
                return Task.CompletedTask;
            }
            context.Response.Redirect(context.RedirectUri);
            return Task.CompletedTask;
        };
    });

步骤2:确保路由顺序正确

在Program.cs中,先映射API端点,再映射Blazor路由,保证API请求不会被Blazor路由捕获:

var app = builder.Build();

// ...其他中间件(如静态文件、HTTPS重定向等)

app.UseAuthentication();
app.UseAuthorization();

// 先映射API
app.MapSampleApi();

// 再映射Blazor组件路由
app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode()
    .AddInteractiveWebAssemblyRenderMode()
    .AddAdditionalAssemblies(typeof(Client._Imports).Assembly);

app.Run();

验证效果

  • 未认证访问Blazor页面(如/dashboard):仍会重定向到登录页,符合预期。
  • 未认证访问API端点/api/auth:返回401状态码;如果用户已登录但无权限,返回403状态码。
  • 正常访问/api/hello:返回"Hello World"文本。

这样就实现了Blazor页面保持登录跳转,API端点返回标准HTTP状态码的需求。

内容的提问来源于stack exchange,提问作者pingu2k4

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:22:40