目录
Authentication与Authorization
Authentication对访问者的用户身份进行验证,“用户是否登录成功”。
Authorization验证访问者的用户身份是否有对资源访问的访问权限,“用户是否有权限访问这个地址”。
标识框架(Identity)
标识(Identity)框架:采用基于角色的访问控制(Role-Based Access Control,简称RBAC)策略,内置了对用户、角色等表的管理以及相关的接口,支持外部登录、2FA等。
标识框架使用EF Core对数据库进行操作,因此标识框架支持几乎所有数据库。
Identity框架的使用
- IdentityUser<TKey>、IdentityRole<TKey>,TKey代表主键的类型。我们一般编写继承自IdentityUser<TKey>、IdentityRole<TKey>等的自定义类,可以增加自定义属性。
- NuGet:Microsoft.AspNetCore.Identity.EntityFrameworkCore。
- 创建继承自IdentityDbContext的类
- 可以通过IdDbContext类来操作数据库,不过框架中提供了RoleManager、UserManager等类来简化对数据库的操作。
- 部分方法的返回值为Task<IdentityResult>类型
初始化
初始化完执行数据库迁移操作
public class MyUser:IdentityUser<long>
{
}
public class MyRole:IdentityRole<long>
{
}
public class MyDbContext:IdentityDbContext<MyUser,MyRole,long>
{
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
{
}
}
Program.cs
//添加数据库上下文
builder.Services.AddDbContext<MyDbContext>(opt => {
string connStr = Environment.GetEnvironmentVariable("ConnStr");
opt.UseSqlServer(connStr);
});
//添加数据保护服务
builder.Services.AddDataProtection();
//添加身份认证服务
builder.Services.AddIdentityCore<MyUser>(options => {
//设置密码规则,不需要数字,小写字母,大写字母,特殊字符,长度为6
options.Password.RequireDigit = false;
options.Password.RequireLowercase