.NET 8 Blazor Server添加认证后服务器交互失效问题
解决Blazor Server登录页交互失效问题
问题原因
- 中间件顺序错误:
UseAntiforgery被放在认证、授权中间件之前,导致Antiforgery令牌生成时未关联认证上下文,交互式请求被拦截。 - SignalR Hub被授权拦截:全局授权策略(FallbackPolicy)要求所有请求必须认证,而Blazor Server交互式组件依赖的
_blazorSignalR 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
相关产品推荐
相关产品推荐

