0

0

在ASP.NET Core中实现身份验证与授权:使用.NET Identity框架

煙雲

煙雲

发布时间:2025-12-29 16:19:04

|

180人浏览过

|

来源于php中文网

原创

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框架

在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.UI

2. 创建自定义用户类(可选)

若需扩展默认用户属性(如电话、昵称),可继承 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 页面用于定制。

笔灵AI论文写作
笔灵AI论文写作

免费生成毕业论文、课题论文、千字大纲,几万字专业初稿!

下载

手动实现登录逻辑

在控制器中注入 SignInManagerUserManager

[HttpPost]
public async Task Login(LoginModel model)
{
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.GetRequiredService>();
if (!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 虽有一定学习成本,但其集成度高、扩展性强,是企业级项目中的可靠选择。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

175

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

210

2025.12.18

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

311

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

709

2023.08.22

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

455

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

6

2025.12.06

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

218

2023.12.07

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

522

2023.08.11

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 39万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号