当前位置:网站首页>ASP.NET 身份认证框架 Identity(一)
ASP.NET 身份认证框架 Identity(一)
2022-07-31 10:04:00 【Phil Arist】
ASP.NET Core 内置了一个强大的身份认证框架 Identity,掌握它可以让我们快速开发高安全的身份认证功能,
不仅如此,它还是一个基于数据库的用户管理系统,其中包含了大量的辅助功能,可以帮助我们完成对用户的管理。
它还可以与 IdentityServer 4 授权无缝集成,进一步开发出强大的认证授权系统。
这个系列的目的,就是快速学习和上手 Identity ,让大家对其有一个系统的了解,内容较为精炼,不会有太多废话。
集成 Identity
在我们创建 ASP.NET Core 应用时,可以选择已经集成了 Identity 的项目模板。
不过,我们现在的目的是学习,所以我并不打算用项目模板来演示,而是从一个简单的 MVC 项目,从头开始集成 Identity。
示例项目:https://github.com/zilor-net/IdentitySample/tree/main/Sample01/Start
这个示例使用 EF Core 与数据库交互,启动项目时会自动迁移模型。
在 Home
控制器中,添加了一个 Employees
操作,用来从数据库中查询员工信息:
集成 Identity
我们需要做的第一件事,就是安装 Identity EFCore
扩展库:
Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore
这个库会帮助我们将 ASP.NET Core Identity,与现有的 EF Core 集成在一起。
安装完成后,在 「Models」 文件夹中,创建一个 「User」 实体类:
public class User : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
这个类需要继承 ASP.NET Core Identity 提供的 IdentityUser
类。
IdentityUser
类中有很多关于用户信息的属性,这些属性在迁移时,都会参与到与 ASP.NET Core Identity 相关的表中。
因此,对于 「User」 类,我们只需要扩展 IdentityUser
类,添加一些自定义的用户属性就可以了,这些属性也都会添加到数据库中。
当然,如果你觉得 IdentityUser
类中的属性,可以满足你的需求,那就不用创建额外的 「User」 类。
换句话说,只有在你需要对 IdentityUser
类进行扩展时,才需要创建自定义的 「User」 类。
现在,修改 「ApplicationContext」 类:
public class ApplicationContext : IdentityDbContext<User>
{
// ...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfiguration(new EmployeeConfiguration());
}
//...
}
这里我们需要使用集成了 Identity 的 「DbContext」 类,而不是原始的 「DbContext」。
还需要在 「OnModelCreating」 方法中,调用基类的 「OnModelCreating」 方法,因为它有一些与 Identity 实体相关的配置。
配置 Identity
我们可以在 「ConfigureServices」 方法中,注册 ASP.NET Core Identity 相关服务。
注册的扩展方法有两个:
builder.Services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<ApplicationContext>();
builder.Services.AddIdentityCore<User>()
.AddEntityFrameworkStores<ApplicationContext>();
「AddIdentityCore」 方法,只会添加用户管理操作,如创建用户、散列密码、密码验证等,所需的服务。
「AddIdentity」 方法,不仅会添加用户管理服务,还会添加支持外部身份验证,以及角色管理相关的服务。
根据你的需要,可以使用不同的方法,注册不同的服务,这里我们使用 「AddIdentity」 方法。
还需要使用 「AddEntityFrameworkStores」 方法,注册与 Identity 数据存储相关的 EF Core 实现。
现在,我们需要创建一个新的迁移,在数据库中添加 Identity 相关的表:
Add-Migration IdentityScheme
Update-Database
更新完成后,打开数据库,可以看到多了很多 ASPNET 前缀的表。
展开 「AspNetUsers」 表的列,我们可以找到刚才 「User」 类中,自定义的两个属性:
不过需要注意的是,由于我们采用的是基于角色的用户管理,而现在这个数据库中,没有任何角色信息。
所以,我们需要创建一些初始数据。
在数据库中设置初始角色,是一个非常常见的操作,在 「Models\Configuration」 文件夹中,创建一个 「IdentityRole」 实体配置类:
public class RoleConfiguration : IEntityTypeConfiguration<IdentityRole>
{
public void Configure(EntityTypeBuilder<IdentityRole> builder)
{
builder.HasData(
new IdentityRole
{
Name = "Guest",
NormalizedName = "GUEST"
},
new IdentityRole
{
Name = "Administrator",
NormalizedName = "ADMINISTRATOR"
});
}
}
这里有两个初始角色数据,然后在上下文中应用这个配置:
modelBuilder.ApplyConfiguration(new RoleConfiguration());
最后,让我们再次创建并应用迁移:
Add-Migration InsertedRoles
Update-Database
查看数据库中的 「AspNetRoles」 表,可以看到这里已经有了两条角色数据。
目前为止,我们已经在项目中,初步集成了 ASP.NET Core Identity 框架,可以看到,这一点不复杂,而且非常简单。
小结
这篇文章简单的介绍了 Identity 框架的集成,以及一些基础知识,以后再跟大家分享注册,登录,登出,邮箱认证等相关知识
边栏推荐
猜你喜欢
随机推荐
Principle of Redis Sentinel
Binary tree search and backtracking problem (leetcode)
js右侧圆点单页滚动介绍页面
Use turtle to draw buttons
尚医通【预约挂号系统】总结
Redis的简单使用
Rich text editor Tinymce
Centos7 install mysql5.7
Kotlin—基本语法(二)
DC-7-vulnhub
WEB核心【记录网站登录人数,记录用户名案例】Cookie技术实现
js滚动条滚动到指定元素
[ 动词词组 ] 合集
csdn文件导出为pdf
学习笔记——七周成为数据分析师《第二周:业务》:业务分析框架
NowCoderTOP28-34 binary tree - continuous update ing
Implement a thread pool
(C语言)程序环境和预处理
【LeetCode】Day108-和为 K 的子数组
js radar chart statistical chart plugin