我们经常使用的各类网站和App均会涉及注册、登录和修改密码等功能,登录系统后,有些功能会提示没有权限,甚至有些位置我们无法访问,这些都是系统权限和认证的体现 。
我们从本章及后面的章节中,将学习在ASP.NET Core应用程序中使用ASP.NET Core Identity实现安全认证相关功能所需要掌握的知识 。
本章主要向读者介绍如下内容 。
- 什么是ASP.NET Core Identity 。
- 如何在系统中启用Identity服务 。
- UserManager与SignInManager的API介绍及使用 。
- 登录用户的Cookie管理 。
添加ASP.NET Core Identity服务这里采用的是EF Core,因为要让我们的系统支持Identity服务,所以需要安装它的程序包 。打开NuGet管理器,安装Microsoft.AspNetCore.Identity.EntityFrameworkCore即可 。
以下是添加和配置ASP.NET Core Identity服务的步骤 。
使AppDbContext继承类IdentityDbContext,然后引入命名空间,代码如下 。
public class AppDbContext:IdentityDbContext{//其余代码}- 应用程序AppDbContextDbContext类必须继承IdentityDbContext类而不是DbContext类 。
- 因为IdentityDbContext提供了管理SQL Server中的Identity表所需的所有DbSet属性,所以将看到ASP.NET Core Identity框架中要生成的所有数据库表 。
- 如果浏览IdentityDbContext类的定义(按F12键可以看到),则将看到它继承自DbContext类 。因此,如果类继承自IdentityDbContext类,那么不必显式继承DbContext类 。
services.AddIdentity<IdentityUser,IdentityRole>().AddEntityFrameworkStores<AppDbContext>();- AddIdentity()方法是指为系统提供默认的用户和角色类型的身份验证系统 。
- IdentityUser类由ASP.NET Core提供,包含UserName、PasswordHash和Email等属性 。这是ASP.NET Core Identity框架默认使用的类,用于管理应用程序的注册用户 。
- 如果读者希望存储有关注册用户的其他信息,比如性别、城市等,则需要创建一个派生自IdentityUser的自定义类 。在此自定义类中添加所需的其他属性,然后插入此类而不是内置的IdentityUser类 。我们将在后面的章节中学习如何执行此操作 。
- 同样,IdentityRole也是ASP.NET Core Identity提供的内置类,包含角色信息 。
- 使用EntityFrameWork Core从基础SQL Server数据库存储和查询注册用户的角色信息 。
- 使用AddEntityFrameworkStores()方法,然后指定DbContext类作为泛型参数 。
public void Configure(IApplicationBuilder app,IWebHostEnvironment env){//如果环境是Development serve Developer Exception Pageif(env.IsDevelopment()){app.UseDeveloperExceptionPage();}//否则显示用户友好的错误页面else if(env.IsStaging() || env.IsProduction() || env.IsEnvironment("UAT")){app.UseExceptionHandler("/Error");app.UseStatusCodePagesWithReExecute("/Error/{0}");}//使用纯静态文件支持的中间件,而不使用带有终端的中间件app.UseStaticFiles();//添加验证中间件app.UseAuthentication();app.UseRouting();app.UseEndpoints(endpoints =>{endpoints.MapControllerRoute(name:"default",pattern:"{controller=Home}/{action=Index}/{id?}");});}在Startup类的Configure()方法中,调用UseAuthentication()方法将Authentication()中间件添加到应用程序的请求处理管道中 。我们希望能够在请求到达MVC中间件之前对用户进行身份验证 。因此,在请求处理管道的UseRouting()中间件之前添加认证中间件 。这很重要,因为我们之前讲过中间件的添加顺序不能乱 。现在开始添加身份迁移 。在Visual Studio中的程序包控制台窗口执行以下命令以添加新迁移 。
Add-Migration AddingIdentity此迁移包含用于创建ASP.NET Core Identity系统所需的表的代码 。如果运行,则会出现以下错误 。
The entity type'IdentityUserLogin'requires a primary key to be defined.
之前因为要封装Seed()方法,所以重写OnModelCreating()方法 。出现这个错误是因为我们在DbContext类中重写了OnModelCreating()方法,但未调用基本IdentityDbContext类OnModelCreating()方法 。
推荐阅读
- 孕吐吃啥可以缓解 怀孕吐吃什么可以缓解
- 亚马逊|NBA中从未缺席过季后赛的球员,个个都是传奇,你都知道么
- 英雄传说零之轨迹图文攻略
- 马的鞭很长吗? 马鞭有60cm那么长
- 漫谈Mysql之主从复制
- 正月初一吃饺子这一习俗从哪个朝代开始?
- Win10 Terminal + WSL 2 安装配置指南
- 从Linux源码看Socket的listen及连接队列
- SQL 中为什么经常要加NOLOCK?
- 大学|国内3所“神秘”的大学,入学要签保密协议,毕业后就从事铁饭碗
