ASP.NET Core Identity提供给我们一组工具包和API,它能帮助我们应用程序创建授权和认证功能,也可以用它创建账户并使用用户名和密码进行登录,同时也提供了角色和角色管理功能。ASP.NET Core Identity使用SQL Server/第三方数据库存储用户名和密码,角色和配置数据

在Program.cs类中添加认证和授权中间件,在app.UseRouting后面添加如下代码:
app.UseAuthentication();
app.UseAuthorization();
ASP.NET Core Identity整个设置过程包括创建新的Model类、配置更改、Controller和Action支持身份验证和授权的操作
User类
User类表示应用程序中的用户,这些用户数据存储在数据库中,User类继承自IdentityUser类,位于命名空间Microsoft.AspNetCore.Identity中,在Models文件夹下创建AppUser.cs类
namespace Identity.Models{
public class AppUser : IdentityUser{}
}
AppUser类没有包含任何方法,这是因为IdentityUser类中提供了一些用户属性像用户名,电子邮件,电话,密码hash值等
IdentityUser 类定义如下常用属性:
名称 | 描述 |
Id | 用户唯一ID |
UserName | 用户名称 |
用户Email | |
PasswordHash | 用户密码的Hash值 |
PhoneNumber | 用户电话号码 |
SecurityStamp | 当每次用户的数据修改时生成随机值 |
创建DataBase Context
DataBase Context类继承自IdentityDbContext<T>类,T表示User类,在应用程序中使用AppUser,IdentityDbContext通过使用Entity Framework Core和数据库进行交互
在Models文件夹下创建一个AppIdentityDbContext类并继承IdentityDbContext<AppUser>类,如下代码:
namespace Identity.Models{
public class AppIdentityDbContext: IdentityDbContext<AppUser>
{
public AppIdentityDbContext(DbContextOptions<AppIdentityDbContext> options):
base(options)
{ }
}
}
创建数据库字符串链接
ASP.NET Core Identity 数据库连接字符串包含数据库名,用户名,密码。通常存储在appsettings.json文件中,这个文件位于根目录下
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=IdentityDB;Trusted_Connection=True;MultipleActiveResultSets=true"
}
连接字符串中Server指定SQL Server的LocalDB,Database指定数据库名称IdentityDB,你也可以起个别的名字
builder.Services.AddDbContext<AppIdentityDbContext>(
options =>options.UseSqlServer(builder.Configuration["ConnectionStrings:DefaultConnection"])
);
builder.Services.AddIdentity<AppUser, IdentityRole>().
AddEntityFrameworkStores<AppIdentityDbContext>().
AddDefaultTokenProviders();
AddIdentity方法的参数类型指定AppUser类和IdentityRole类
AddEntityFrameworkStores方法指定Identity使用EF Core作为存储和项目中使用AppIdentityContext作为DB Context
AddDefaultTokenProviders方法添加默认Token提供程序,针对重置密码,电话号码和邮件变更操作以及生成双因子认证的
token,这部分我们后面会介绍
我们前面添加了app.UseAuthentication()方法,经过这个方法的每个HTTP请求会将用户的凭据将添加到Cookie或URL中。这使得用户和他发送的HTTP请求就会产生关联。
dotnet tool install --global dotnet-ef


现在我们运行 EF Core Migration 命令
第一个命令:
dotnet ef migrations add InitDBCommand
dotnet ef database update
上面命令将创建数据库以及表,执行完成这个命令我们就可以看到我们表结构。
第二种方法我们可以不使用.NET Core CLI命令,微软给我提供了一个包Microsoft.EntityFrameworkCore.Tools。该包提供一些命令帮助我们生成数据库和表,在程序包管理控制台中运行如下两个命令:
Add-Migration InitDBCommand --创建Migration
Update-Database --将Migration 更新到数据库
7、ASP.NET Core Identity 数据库
我们查看一下刚才创建的数据库

我们看一下每张表的作用
_EFMigrationsHistory – 包含了前面所有的Migration AspNetRoleClaims – 按照角色存储Claims AspNetRoles – 存储所有的角色 AspNetUserClaims – 存储用户的Claims AspNetUserLogins –存储用户的登录次数 AspNetUserRoles – 存储用户对应的角色 AspNetUsers – 存储所有用户 AspNetUserTokens – 存储外部认证的token