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

.NET 8 Blazor Server添加认证后服务器交互失效问题

解决Blazor Server登录页交互失效问题

问题原因

  1. 中间件顺序错误:UseAntiforgery 被放在认证、授权中间件之前,导致Antiforgery令牌生成时未关联认证上下文,交互式请求被拦截。
  2. SignalR Hub被授权拦截:全局授权策略(FallbackPolicy)要求所有请求必须认证,而Blazor Server交互式组件依赖的_blazor SignalR Hub端点也被该策略拦截,未认证用户无法建立连接,导致按钮点击无响应。

修复步骤

1. 调整中间件顺序

在Program.cs中,将UseAntiforgery移动到UseAuthentication和UseAuthorization之后:

app.UseHttpsRedirection();

app.UseStaticFiles();
// 先处理认证、授权,再处理Antiforgery
app.UseAuthentication();
app.UseAuthorization();
app.UseAntiforgery();

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

2. 允许未认证用户访问Blazor SignalR Hub

在Program.cs中,为Blazor Hub端点添加AllowAnonymous,确保未认证用户能建立交互式连接:

// 单独为Blazor Hub设置允许匿名
app.MapBlazorHub()
   .AllowAnonymous();

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

或者也可以直接在映射Razor组件时配置登录页的授权例外:

app.MapRazorComponents<App>()
   .AddInteractiveServerRenderMode()
   .RequireAuthorization()
   .AllowAnonymousToPage("/login");

3. 验证Login.razor配置

确保Login.razor上的[AllowAnonymous]属性正确添加,保证登录页路由本身允许未认证访问:

@page "/login"
@attribute [AllowAnonymous]
<!-- 其余代码不变 -->

完成以上修改后,登录页的按钮点击即可正常触发服务器端方法,同时全局授权策略依然生效,未认证用户访问其他页面会自动跳转到登录页。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:22:06