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

.NET 9 Blazor Web App中CascadingAuthenticationState始终未认证

.NET 9 Blazor Web App Windows身份验证下AuthenticationState未认证问题解决

针对你遇到的.NET 9 Blazor Web App中,Windows身份验证已开启,但通过CascadingAuthenticationState获取的User.Identity.IsAuthenticated始终为false的问题,可通过以下步骤排查修复:

1. 补全Windows身份验证服务注册

.NET 9 Blazor Web App模板默认不会自动添加Windows身份验证的服务配置,你需要在Program.cs中明确注册相关服务,并确保中间件顺序正确:

var builder = WebApplication.CreateBuilder(args);

// 注册Windows身份验证核心服务
builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
    .AddNegotiate();

// 仅需添加一次Authorization服务,无需重复注册AddAuthorizationCore
builder.Services.AddAuthorization();
builder.Services.AddCascadingAuthenticationState();

builder.Services.AddRazorComponents()
    .AddInteractiveServerComponents();

var app = builder.Build();

// 环境相关配置
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error", createScopeForErrors: true);
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();

// 关键:Authentication和Authorization中间件必须在MapRazorComponents之前
app.UseAuthentication();
app.UseAuthorization();

app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode();

app.Run();

2. 确认身份验证配置的完整性

  • 除launchSettings.json外,右键项目→属性→调试,确保勾选启用Windows身份验证,同时取消启用匿名身份验证。
  • 验证launchSettings.json的iisSettings配置无误:
"iisSettings": {
  "windowsAuthentication": true,
  "anonymousAuthentication": false,
  "iisExpress": {
    "applicationUrl": "http://localhost:50496",
    "sslPort": 44397
  }
}

3. 验证请求级用户身份

添加一个测试端点,确认HttpContext中是否正确获取到当前请求的用户身份,排除Blazor组件层面的问题:

// 在Program.cs的app.Run()之前添加
app.MapGet("/check-auth", (HttpContext context) =>
{
    var identity = context.User.Identity;
    return identity?.IsAuthenticated == true 
        ? $"当前请求用户:{identity.Name}(已认证)" 
        : "当前请求未认证";
});

启动项目后访问/check-auth:

  • 若返回未认证,说明身份验证本身未正确配置,需检查IIS/IIS Express的身份验证设置;
  • 若返回已认证,则问题出在Blazor组件的状态传递上。

4. 正确使用CascadingAuthenticationState

在.NET 9 Blazor Web App模板中,注册AddCascadingAuthenticationState()服务后,框架会自动在组件树顶部注入该级联参数,无需手动在App.razor或Routes.razor中包裹CascadingAuthenticationState,建议移除你之前添加的包裹代码。

关于WindowsIdentity.GetCurrent()的说明

该方法获取的是应用进程运行的系统身份,而非当前HTTP请求的用户身份,仅在本地Windows环境下有效,不能作为请求级用户认证的判断依据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:55:57