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

如何在.NET 6 Blazor Server应用中配置特定域用户的Windows身份验证

.NET 6 Blazor Server 特定域用户访问控制的标准实现方案

针对你的场景(IIS托管、Windows身份验证的Blazor Server应用),推荐使用基于策略的授权这一.NET官方标准方案,替代Web Forms时代的web.config标签控制,以下是具体实现步骤:

1. 确认Windows身份验证已正确配置

  • 在IIS站点的身份验证设置中,启用Windows身份验证,禁用匿名身份验证。
  • 项目launchSettings.json中,确保iisSettings.windowsAuthentication为true,anonymousAuthentication为false。

2. 基于策略的授权实现(核心方案)

步骤1:定义授权策略

在Program.cs中注册自定义授权策略,从appsettings.json读取允许的用户列表并验证:

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("AllowedDomainUsers", policy =>
    {
        var allowedUsers = builder.Configuration.GetSection("Security:AllowedUsers").Get<string[]>();
        policy.RequireAssertion(context =>
        {
            var currentUser = context.User.Identity?.Name;
            return allowedUsers != null && allowedUsers.Contains(currentUser, StringComparer.OrdinalIgnoreCase);
        });
    });
});

步骤2:在appsettings.json中配置允许用户

利用你提到的Security子节存储授权用户列表,实现配置与代码分离:

{
  "Security": {
    "AllowedUsers": [
      "DOMAIN\\User1",
      "DOMAIN\\User2"
    ]
  },
  // 其他配置项...
}

步骤3:应用授权策略

全局应用(全站限制)

若需整个站点仅允许授权用户访问,在Program.cs中添加全局授权验证逻辑:

app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
app.UseAuthorization();

// 全局拦截请求验证权限
app.MapWhen(_ => true, app =>
{
    app.Use(async (context, next) =>
    {
        var authService = context.RequestServices.GetRequiredService<IAuthorizationService>();
        var result = await authService.AuthorizeAsync(context.User, "AllowedDomainUsers");
        
        if (!result.Succeeded)
        {
            context.Response.StatusCode = StatusCodes.Status403Forbidden;
            await context.Response.WriteAsync("您无访问权限。");
            return;
        }
        
        await next();
    });
});

局部应用(特定页面/组件限制)

仅需限制部分页面时,在对应组件顶部添加授权特性:

@page "/restricted"
@attribute [Authorize(Policy = "AllowedDomainUsers")]

<h3>仅授权域用户可见内容</h3>

3. 更优的企业级替代方案:AD组授权

若允许访问的用户属于同一AD域组,直接基于组授权无需维护用户列表,更易管理:

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("AllowedDomainGroup", policy =>
    {
        policy.RequireRole("DOMAIN\\AllowedAccessGroup");
    });
});

之后只需在AD中管理组内用户,无需修改应用配置,适合企业场景。

方案优势

  • 符合.NET官方授权规范,集成框架身份验证体系,扩展性强。
  • 配置集中管理,修改无需重新编译。
  • 支持全局/局部灵活授权,适配不同场景需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:35:20