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
相关产品推荐
相关产品推荐

