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

ASP.NET Core 6 MVC应用:从文件读取用户白名单实现授权

ASP.NET Core 6 MVC 基于文件白名单的授权实现

1. 创建用户白名单文件

在项目根目录下新建 AllowedUsers.txt,每行填写一个允许访问的用户名(格式如 DOMAIN\NAME):

DOMAIN\NAME
DOMAIN2\NAME2

2. 读取白名单并配置授权策略

修改 Program.cs 中的授权逻辑,替换硬编码的用户列表为从文件读取的白名单:

// 读取白名单文件,忽略空行,不区分大小写
var allowedUsers = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
var whitelistPath = Path.Combine(Directory.GetCurrentDirectory(), "AllowedUsers.txt");

if (File.Exists(whitelistPath))
{
    var validLines = File.ReadAllLines(whitelistPath).Where(line => !string.IsNullOrWhiteSpace(line));
    allowedUsers.UnionWith(validLines);
}

// 构建授权策略
var policy = new AuthorizationPolicyBuilder()
    .RequireAssertion(context => 
        context.User.Identity?.Name != null && allowedUsers.Contains(context.User.Identity.Name))
    .Build();

// 添加全局授权过滤器
config.Filters.Add(new AuthorizeFilter(policy));

3. 可选:实时更新白名单(无需重启应用)

如果需要管理员修改文件后立即生效,添加文件监听逻辑:

var watcher = new FileSystemWatcher(Directory.GetCurrentDirectory(), "AllowedUsers.txt");
watcher.Changed += (_, e) =>
{
    try
    {
        // 重新读取文件,更新白名单
        var validLines = File.ReadAllLines(e.FullPath).Where(line => !string.IsNullOrWhiteSpace(line));
        allowedUsers = new HashSet<string>(validLines, StringComparer.OrdinalIgnoreCase);
    }
    catch (Exception ex)
    {
        // 处理文件读取异常(比如日志记录)
        Console.WriteLine($"Failed to update whitelist: {ex.Message}");
    }
};
watcher.EnableRaisingEvents = true;

注意事项

  • 确保 AllowedUsers.txt 文件的权限设置正确,仅允许管理员修改
  • 生产环境中建议添加异常处理和日志记录,避免文件读取失败导致授权异常

内容的提问来源于stack exchange,提问作者Matěj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:28:44