ASP.NET Core Identity 是构建安全用户管理系统的强大框架,支持注册、登录、角色与声明授权。1. 安装 Microsoft.AspNetCore.Identity.EntityFrameworkCore 等包;2. 可选继承 IdentityUser 创建自定义用户类如 AppUser;3. 创建继承 IdentityDbContext 的 DbContext;4. 在 Program.cs 中注册服务:AddDbContext、AddIdentity、AddAuthentication、AddAuthorization;5. 可使用 AddRazorPages 并运行 aspnet-codegenerator identity 生成 UI 页面;6. 手动登录需注入 SignInManager 调用 PasswordSignInAsync;7. 创建角色如 Admin 并通过 UserManager 分配用户;8. 使用 [Authorize(Roles = "Admin")] 控制访问;9. 添加自定义声明如 CanEdit;10. 定义策略 RequireClaim("CanEdit", "true") 并通过 [Authorize(Policy = "CanEditPolicy")] 使用。结合角色、声明与策略可构建灵活权限体系,适合企业级应用。

在ASP.NET Core中实现身份验证与授权,.NET Identity 是一个强大且灵活的框架,能够帮助开发者快速构建安全的用户管理系统。它内置了用户注册、登录、密码管理、角色控制和声明授权等功能,适合大多数需要用户认证的Web应用。
配置 ASP.NET Core Identity
.NET Identity 通常基于 Entity Framework Core 实现数据持久化,支持自定义用户模型和存储结构。
1. 安装必要包
Microsoft.AspNetCore.Identity.EntityFrameworkCore Microsoft.EntityFrameworkCore.SqlServer Microsoft.AspNetCore.Identity.UI2. 创建自定义用户类(可选)
若需扩展默认用户属性(如电话、昵称),可继承 IdentityUser:
public class AppUser : IdentityUser{
public string Nickname { get; set; }
}
3. 配置 DbContext
创建上下文类继承 IdentityDbContext:
public class AppDbContext : IdentityDbContext{
public AppDbContext(DbContextOptions
}
4. 在 Program.cs 中注册服务
builder.Services.AddDbContextoptions.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
builder.Services.AddIdentity
.AddEntityFrameworkStores
.AddDefaultTokenProviders();
// 启用身份验证中间件
builder.Services.AddAuthentication();
builder.Services.AddAuthorization();
启用身份验证与登录流程
Identity 提供了内置的 UI 页面处理登录注册,也可手动实现逻辑。
使用内置 UI(快速开发)
// 在 Program.cs 添加builder.Services.AddRazorPages().AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Account/Login");
});
app.MapRazorPages();
运行 dotnet aspnet-codegenerator identity -dc AppDbContext 可生成 UI 页面用于定制。
手动实现登录逻辑
在控制器中注入 SignInManager
public async Task
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(
model.Email, model.Password, model.RememberMe, false);
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError("", "无效登录尝试");
}
return View(model);
}
实现基于角色的授权
Identity 支持角色管理,可用于控制访问权限。
创建并分配角色
var roleManager = serviceProvider.GetRequiredServiceif (!await roleManager.RoleExistsAsync("Admin"))
{
await roleManager.CreateAsync(new IdentityRole("Admin"));
}
var userManager = serviceProvider.GetRequiredService
var user = await userManager.FindByNameAsync("admin@site.com");
await userManager.AddToRoleAsync(user, "Admin");
在控制器或页面中使用 [Authorize]
[Authorize(Roles = "Admin")]public class AdminController : Controller
{
// 只有 Admin 角色可访问
}
使用声明(Claims)进行细粒度授权
声明代表用户的详细信息或权限,比角色更灵活。
为用户添加自定义声明
await _userManager.AddClaimAsync(user, new Claim("CanEdit", "true"));定义策略并使用
// 在 Program.cs 中注册策略builder.Services.AddAuthorization(options =>
{
options.AddPolicy("CanEditPolicy", policy =>
policy.RequireClaim("CanEdit", "true"));
});
使用策略:
[Authorize(Policy = "CanEditPolicy")]public IActionResult Edit() => View();
基本上就这些。通过结合角色、声明和策略,可以构建出层次清晰、易于维护的权限体系。ASP.NET Core Identity 虽有一定学习成本,但其集成度高、扩展性强,是企业级项目中的可靠选择。










