做.NET 后台项目的时候,最头疼的莫过于权限这一块。很多人开发 Web、管理系统、前后端分离项目,每次新项目都要从头搭一套 ASP.NET Core Identity。建用户表、角色表、登录接口、JWT 签发、后台管理页面,一套流程走下来大半天就没了;老项目想要补上用户权限,又怕改到现有业务代码,一不小心就和原有逻辑耦合在一起,改出一堆 bug。
🔖 介绍
一款轻量级的 ASP.NET Core Identity 插件,主打插拔式用户权限后台管理。简单来说,它就是一个现成做好的权限工具箱,底层基于微软原生的 Identity,没有重新造一套权限轮子。
- 开箱自带可视化后台页面,网页上就可以新增用户、分配角色、管控接口权限;
- 非侵入式接入,不会强制修改你现有的数据库结构和业务代码;
- 同时支持 Cookie 会话登录和前后端分离最常用的 JWT 令牌认证;
- EF Core 驱动数据库,SQLServer、MySQL、Oracle、SQLite 这些主流库都兼容;
- Linux、macOS、Windows 跨平台部署都没问题。
核心口号:一行代码给项目加上完整 Identity 权限系统。
🔖 适用场景
- 快速新建后台管理系统:想快速做一个管理平台,不想花时间搭建登录、账号角色管理模块,优先用它。
- 现有老项目补权限:已经开发了一部分业务接口、网站,当初没做登录鉴权,现在需要加上账号管控,又不想大面积重构代码。
- 前后端分离项目:Vue、React 前端 + .NET WebApi 后端,需要快速产出 JWT 登录、令牌刷新、接口鉴权能力。
- 小型内网工具、工控后台、WMS/MES 配套管理页面:内部工具不需要复杂的自研账号体系,轻量化权限就够用。
- 分布式多服务项目:多个微服务共用一套账号权限,数据库抽离成独立库,统一签发 JWT 做身份校验。
不太适合:需要深度魔改 Identity 登录流程、自定义超多复杂业务字段的大型会员系统。
🌾 技术特点
- 底层框架:ASP.NET Core + 微软官方 ASP.NET Core Identity,鉴权逻辑走官方标准,安全可靠,不是自研认证。
- 认证模式:
- Cookie:单体 MVC、Razor 页面传统网站首选,适合带后台页面的项目;
- JWT-Bearer:前后端分离 Api 项目,无状态令牌,适配前端异步请求;
- Session:可选兼容模式。
- 数据层:EF Core,可自由切换数据库驱动,默认自带 SQLite 开箱即用,不用你提前新建数据库。
- 后台前端:Vue3 + Vite,源码开放,可以自己编译替换登录页、管理后台 UI。
- 接入方式:Nuget 包引入,依赖注入服务注册,插拔式组件;支持关闭自带登录页,对接你自己的登录业务。
- 权限控制:完全兼容原生
[Authorize]、[Authorize(Roles="xxx")] 特性标记控制器与接口。
🌾 代码示例
示例 1:最简开箱即用(一行代码,默认 Cookie 模式)
新建一个空 Web 项目,Nuget 装好 MiniAuth,Program.cs 只需要一行注册:
var builder = WebApplication.CreateBuilder(args);
// 一行启动MiniAuth,默认Cookie身份认证
builder.Services.AddMiniAuth();
var app = builder.Build();
app.Run();
运行项目之后访问地址:https://你的地址/miniauth/index.html。默认管理员账号:admin@mini-software.github.io,初始密码一定要登录后第一时间改掉。
给接口加上权限控制:
[ApiController]
[Route("api/[controller]")]
public class TestController : ControllerBase
{
[Authorize] // 需要登录才可访问
[HttpGet("hello")]
public IActionResult Hello()
{
return Ok("已成功通过权限校验");
}
[Authorize(Roles = "admin")] // 必须admin角色
[HttpGet("adminOnly")]
public IActionResult AdminFunc()
{
return Ok("管理员专属接口");
}
}
示例 2:前后端分离,开启 JWT 认证模式
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMiniAuth(options =>
{
//切换成Bearer JWT模式
options.AuthenticationType = MiniAuthOptions.AuthType.BearerJwt;
// 务必换成你自己的密钥,生产环境不要写死在代码,放配置文件
options.JWTKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("这里换成你自定义的长密钥"));
// 设置Token过期时长,单位秒,这里设1小时
options.TokenExpiresIn = 60 * 60;
});
var app = builder.Build();
app.Run();
前端 POST 请求登录接口获取令牌:POST /miniauth/login
{
"username": "admin@mini-software.github.io",
"password": "你的密码",
"remember": false
}
成功返回 accessToken,之后每次请求受保护接口,请求头带上:
Authorization: Bearer 你的accessToken
示例 3:接入你项目现有的 Identity 数据库(老项目兼容)
如果你本身项目已经有一套 Identity、SQLServer 数据库,不想用 MiniAuth 自带的 SQLite 库,就关闭自动初始化,手动指定你的上下文:
var builder = WebApplication.CreateBuilder(args);
//你自己原有的Identity配置代码
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddControllersWithViews();
//关闭自动初始化,延后手动挂载
builder.Services.AddMiniAuth(autoUse: false);
var app = builder.Build();
//绑定你自己的数据库上下文、用户实体、角色实体
app.UseMiniAuth<ApplicationDbContext, IdentityUser, IdentityRole>();
app.Run();
示例 4:关闭自带登录页,使用你自己的登录页面
builder.Services.AddMiniAuth(options =>
{
//跳转至你项目自己的登录地址
options.LoginPath = "/Identity/Account/Login";
//禁用MiniAuth自带登录接口和页面
options.DisableMiniAuthLogin = true;
});
✨ 源码
🌞 最后
看到这里辛苦啦~如果这份.NET 干货帮你搞定了开发难题、打开了新思路,别忘顺手点个赞~你的每一份认可,都是我坚持输出优质内容的底气。技术上有任何疑问、想交流开发思路,随时留言就好。