如何为Server Side Blazor站点配置Windows角色组全站授权?
为Server Side Blazor配置全站Windows角色授权
1. 启用Windows身份验证
先确保项目开启Windows身份验证并禁用匿名访问:
- 打开项目属性的「调试」选项卡,勾选「启用Windows身份验证」,取消「启用匿名访问」。
- 或者直接修改
launchSettings.json,在对应配置节点中设置:
"windowsAuthentication": true, "anonymousAuthentication": false
2. 注册全局授权策略
Blazor Server的全站授权通过ASP.NET Core的授权体系实现,无需依赖传统web.config配置。在Program.cs中完成全局策略的定义和注册:
var builder = WebApplication.CreateBuilder(args); // 添加Blazor核心服务 builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); // 配置全局授权策略,指定允许访问的Windows角色组 builder.Services.AddAuthorization(options => { // 设置默认回退策略,全站所有请求都需满足此策略 options.FallbackPolicy = new AuthorizationPolicyBuilder() .RequireRole("指定的第一个Windows角色组", "指定的第二个Windows角色组") .Build(); }); var app = builder.Build(); // 中间件配置(注意顺序不能错) if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); // 启用身份验证和授权中间件 app.UseAuthentication(); app.UseAuthorization(); app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); app.Run();
3. 自定义未授权提示(可选)
如果需要给未授权用户显示友好提示,可修改_Host.cshtml,提前做授权检查:
@page "/" @namespace YourApp.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @{ Layout = null; } @using Microsoft.AspNetCore.Authorization @inject IAuthorizationService AuthorizationService @{ // 验证用户是否属于指定角色组 var authResult = await AuthorizationService.AuthorizeAsync(User, new[] {"指定的第一个Windows角色组", "指定的第二个Windows角色组"}); if (!authResult.Succeeded) { <div style="text-align:center; margin-top:50px;"> <h1>无访问权限</h1> <p>您所在的用户组无权访问此站点,请联系管理员。</p> </div> return; } } <!DOCTYPE html> <html lang="zh-CN"> <head> <!-- 页面头部内容 --> </head> <body> <component type="typeof(App)" render-mode="ServerPrerendered" /> <!-- 页面脚本 --> </body> </html>
说明
Blazor Server基于ASP.NET Core框架,授权逻辑完全沿用ASP.NET Core的体系,不再依赖传统web.config的<authorization>节点。通过设置全局FallbackPolicy,可以确保站点所有页面和请求都必须通过指定Windows角色组的验证,达到全站权限限制的目的。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

