在ASP.NET Core中实现身份验证与授权:使用.NET Identity框架
发布时间 - 2025-12-29 00:00:00 点击率:次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 options) : base(options) { }
}
4. 在 Program.cs 中注册服务
builder.Services.AddDbContext(options =>options.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 和 UserManager:
[HttpPost]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.GetRequired
Serviceif (!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 虽有一定学习成本,但其集成度高、扩展性强,是企业级项目中的可靠选择。
# word
# app
# ai
# microsoft
# nas
# sqlserver
# 用户注册
# 登录注册
# .net
# red
# 中间件
# String
# if
# 继承
# class
# public
# var
# default
# ui
# 自定义
# 管理系统
# 身份验证
# 可选
# 是一个
# 也可
# 等功能
# 但其
# 虽有
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
Python文件流缓冲机制_IO性能解析【教程】
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
如何快速重置建站主机并恢复默认配置?
北京企业网站设计制作公司,北京铁路集团官方网站?
Bootstrap整体框架之JavaScript插件架构
如何基于云服务器快速搭建个人网站?
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
网页设计与网站制作内容,怎样注册网站?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
如何在Tomcat中配置并部署网站项目?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
如何用AWS免费套餐快速搭建高效网站?
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
北京专业网站制作设计师招聘,北京白云观官方网站?
公司网站制作价格怎么算,公司办个官网需要多少钱?
EditPlus 正则表达式 实战(3)
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
网站制作企业,网站的banner和导航栏是指什么?
详解Oracle修改字段类型方法总结
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
大连 网站制作,大连天途有线官网?
googleplay官方入口在哪里_Google Play官方商店快速入口指南
图册素材网站设计制作软件,图册的导出方式有几种?
常州企业网站制作公司,全国继续教育网怎么登录?
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Laravel如何自定义错误页面(404, 500)?(代码示例)
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
Python数据仓库与ETL构建实战_Airflow调度流程详解
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
香港服务器租用费用高吗?如何避免常见误区?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
Python并发异常传播_错误处理解析【教程】
浅谈redis在项目中的应用
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议

