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

.NET 8 Blazor交互式服务端登录后API请求未授权问题排查

问题描述

构建基于.NET 8的混合SSR(服务器端渲染)+交互式服务端渲染服务,通过SSR完成登录流程后,Blazor交互式页面的HttpContext显示用户已处于登录状态,但所有对后端API的请求均返回未授权,TestPage中的API请求直接返回登录页面文本而非预期内容。

问题原因

核心问题是注入的HttpClient未携带当前用户的认证Cookie:

  • 交互式服务端渲染模式下,Blazor页面的HttpContext对应当前SignalR连接的用户上下文,因此能正确显示已认证状态;
  • 但服务器端发起的HttpClient请求与浏览器请求上下文分离,不会自动携带用户的认证Cookie,导致API接口判定请求未授权,并重定向到登录页面。
解决方案

1. 配置HttpClient携带认证Cookie

修改Program.cs中的HttpClient注册逻辑,从当前HttpContext中获取认证Cookie并添加到HttpClient请求头:

// 先注册IHttpContextAccessor
builder.Services.AddHttpContextAccessor();

// 替换原有的HttpClient注册代码
builder.Services.AddScoped(sp =>
{
    var httpContextAccessor = sp.GetRequiredService<IHttpContextAccessor>();
    var context = httpContextAccessor.HttpContext;
    var client = new HttpClient();
    
    var baseAddress = new Uri(builder.Configuration["ApiUrl"] ?? "http://localhost:5009/");
    client.BaseAddress = baseAddress;

    // 复制当前用户的Cookie到HttpClient请求头
    if (context?.Request.Cookies != null)
    {
        foreach (var cookie in context.Request.Cookies)
        {
            client.DefaultRequestHeaders.Add("Cookie", $"{cookie.Key}={cookie.Value}");
        }
    }

    return client;
});

2. 确认中间件顺序正确性

确保Program.cs中的中间件顺序符合规范,认证相关中间件必须按以下顺序排列:

app.UseStaticFiles();
app.UseAntiforgery();
app.UseAuthentication(); // 先认证
app.UseAuthorization();  // 后授权

3. 跨域场景额外配置(若API与Blazor域名不同)

如果API服务和Blazor应用部署在不同域名下,需配置CORS允许携带凭证:

// 注册CORS策略
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowBlazorCredentials", policy =>
    {
        policy.WithOrigins("http://your-blazor-app-domain")
              .AllowAnyHeader()
              .AllowAnyMethod()
              .AllowCredentials(); // 允许请求携带Cookie
    });
});

// 启用CORS(需放在UseRouting之后、UseAuthorization之前)
app.UseCors("AllowBlazorCredentials");
验证步骤
  1. 登录应用后进入TestPage,点击"Get Test Data"按钮;
  2. 通过浏览器开发者工具的网络面板,检查API请求是否携带了认证Cookie;
  3. 确认API返回内容为Hello from the API!,而非登录页面文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:05:55