快速掌握 ASP.NET 身份认证框架 Identity(一)

推荐关注「码侠江湖」星标,时刻不忘江湖事

ASP.NET Core 内置了一个强大的身份认证框架 Identity,掌握它可以让我们快速开发高安全的身份认证功能,

不仅如此,它还是一个基于数据库的用户管理系统,其中包含了大量的辅助功能,可以帮助我们完成对用户的管理。

它还可以与 IdentityServer 4 授权无缝集成,进一步开发出强大的认证授权系统。

这个系列的目的,就是快速学习和上手 Identity ,让大家对其有一个系统的了解,内容较为精炼,不会有太多废话。

32ab19d34909ba239bfce334f339a6d1.png

集成 Identity

在我们创建 ASP.NET Core 应用时,可以选择已经集成了 Identity 的项目模板。

不过,我们现在的目的是学习,所以我并不打算用项目模板来演示,而是从一个简单的 MVC 项目,从头开始集成 Identity。

示例项目:https://github.com/zilor-net/IdentitySample/tree/main/Sample01/Start

这个示例使用 EF Core 与数据库交互,启动项目时会自动迁移模型。

在 Home 控制器中,添加了一个 Employees 操作,用来从数据库中查询员工信息:

ce9e4ce09e82910e53d0e6ef6f555dad.png

集成 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」 类中,自定义的两个属性:

aa367174799137a04420dd653d4065da.png

不过需要注意的是,由于我们采用的是基于角色的用户管理,而现在这个数据库中,没有任何角色信息。

所以,我们需要创建一些初始数据。

在数据库中设置初始角色,是一个非常常见的操作,在 「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 框架的集成,以及一些基础知识,下篇文章将会继续讲解用户的注册。

更多精彩内容,请关注我▼▼

4b3df2d7d847bb4e3502bee4b9b88fd7.gif

如果喜欢我的文章,那么

在看和转发是对我最大的支持!

(戳下面蓝字阅读)

d971b6e3ef4c5e2a88fda8cf9044bd93.png

推荐关注微信公众号:码侠江湖

                        7cd3536bcb52f7721afe2b7d3589ac12.png觉得不错,点个在看再走哟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈大型web系统架构

动态应用&#xff0c;是相对于网站静态内容而言&#xff0c;是指以c/c、php、Java、perl、.net等服务器端语言开发的网络应用软件&#xff0c;比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可分。   大型动态应用…

PHP: 手把手编写自己的 MVC 框架实例教程

1 什么是MVC MVC模式&#xff08;Model-View-Controller&#xff09;是软件工程中的一种软件架构模式&#xff0c;把软件系统分为三个基本部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。 …

2021年复盘总结发现了C站博主缺少的赚钱之路

一、 我2021年的六大Flag 其实最开始我是不打算年终总结的&#xff0c;因为2021年我的十大Flag都没有完成&#xff0c;我说出来可能你会嘲笑我&#xff0c;所以我打算还是说出来吧。 这六大Flag如下&#xff1a; C站百万粉百篇实战文其他自媒体平台十万粉公众号一万粉财务自…

五大微信小程序开发IDE深度评测

微信小程序已经内测有一段时间了&#xff0c;笔者本着好奇加学习的心态写了几个小demo&#xff0c;虽然在MINA框架上并没有遇到太多的坑&#xff0c;但官方开发工具实在不敢恭维。 api提示不全&#xff0c;要一个个查api啊&#xff0c;写代码超级慢啊 很多必备的快捷键都没有&…

Maui的学习之路(2)--Mac窗体设置

Maui的学习之路今天是我开启Maui学习之路的第二天&#xff0c;我不是很高兴又能水一篇文章&#xff0c;我只能说这文章真好水。话不多说&#xff0c;我们进入正题&#xff0c;昨天解决了Windows下TitleBar以及窗体大小的问题&#xff0c;今天同样的问题&#xff0c;在Mac上又要…

ArcGIS10.8中如何获取线状、面状数据的折点,并计算折点坐标?

如下图所示为面状要素,ArcGIS10.8中如何获取线状和面状数据的折点(起点、终点、中点、端点),并计算折点的坐标(X,Y,Z,M)? 下图所示为线状(Polyline)和面状(Polygon)要素的起点、终点和折点的示意图。

[转]Cordova + Ionic in Visual Studio - 101 Tutorial [Part I]

本文转自&#xff1a;http://binarylies.ghost.io/cordova-ionic-in-visual-studio/ Hi everyone, I thought about lending a hand to all the people that are, as I have been recently, exploring Cordova and all its features for the first time. For the ones still tr…

【转】学会这13个原则写UI界面文案,用户才能秒懂

原文网址&#xff1a;http://www.niaogebiji.com/article-12011-1.html 摘要: 首先&#xff0c;在写UI文案之前&#xff0c;为了理清思路&#xff0c;要先搞清楚三个问题&#xff1a;我&#xff08;设计师&#xff09;想让用户做什么&#xff1f; – 我写文案的目的为什么要让用…

【前端就业课 第一阶段】HTML5 零基础到实战(一)基础代码结构详解

注意&#xff1a;手机&#xff08;APP&#xff09;打开&#xff0c;内容显示更佳&#xff0c;不会的私聊博主即可 想要拿代码或加入学习计划&#xff08;** 博主会监督你并且教你写文章 **&#xff09;的拉到最下面&#xff08;PC端Web打开&#xff09;加博主即可&#xff0c;目…

【框架篇】mvc、mvp、mvvm使用关系总结

MVC MVC全名是Model View Controller&#xff0c;是模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)的缩写&#xff0c;一种软件设计典范&#xff0c;用一种业务逻辑、数据、界面显示分离的方法组织代码&#xff0c;将业务逻辑聚集到一个部件里面&#xff0c…

Android之使用自定义华为扫描SDK扫描二维码和识别本地图片

1、需求 更具UI的设计实现扫描二维码和识别本地图片二维码功能。 zxing扫描二维码还可以,但是识别本地图片二维码功能效果太差,非常不理想,看了看多github很多zxing扩展的开源项目,识别本地图片二维码功能效果不乐观,有些甚至还有裁剪本地图片,还是不能识别,果断放弃zb…

Matlab R2016b简体中文版安装教程(附Matlab R2016b百度网盘下载地址)

下载的Matlab R2016b软件安装包(文末附有下载地址)目录如下所示: 安装过程: 1. 安装主程序R2016b_win64_dvd1.iso和R2016b_win64_dvd2.iso 由于目前大多数及其都是Win8或10系统,所以选中R2016b_win64_dvd1.iso,右键→Windows资源管理器打开。Win7系统可以安装好压软件之后…

深度学习String、StringBuffer、StringBuilder

相信String这个类是Java中使用得最频繁的类之一&#xff0c;并且又是各大公司面试喜欢问到的地方&#xff0c;今天就来和大家一起学习一下String、StringBuilder和StringBuffer这几个类&#xff0c;分析它们的异同点以及了解各个类适用的场景。下面是本文的目录大纲&#xff1a…

MySQL5.5多实例编译安装——mysqld_multi

一、MySQL多实例简介 MySQL多实例&#xff0c;简单地说&#xff0c;就是在一台服务器上同时开启多个不同的服务端口&#xff08;如&#xff1a;3306、3307&#xff09;&#xff0c;同时运行多个MySQL服务进程&#xff0c;这些服务进程通过不同的socket监听来自不同的端口来提供…

【前端就业课 第一阶段】HTML5 零基础到实战(二)超链接

注意&#xff1a;手机&#xff08;APP&#xff09;打开&#xff0c;内容显示更佳&#xff0c;不会的私聊博主即可 想要拿代码或加入学习计划&#xff08;** 博主会监督你并且教你写文章 **&#xff09;的拉到最下面&#xff08;PC端Web打开&#xff09;加博主即可&#xff0c;目…

C语言,C#语言求100-999内的水仙花数源程序

水仙花数&#xff08;Narcissistic number&#xff09;也被称为超完全数字不变数&#xff08;pluperfect digital invariant, PPDI&#xff09;、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数&#xff08;Armstrong number&#xff09;&#xff0c;水仙花数是指一个 3 位数&#…

算法马拉松13 A-E解题报告

A题意&#xff08;取余最长路&#xff09;: 佳佳有一个n*m的带权矩阵&#xff0c;她想从(1,1)出发走到(n,m)且只能往右往下移动&#xff0c;她能得到的娱乐值为所经过的位置的权的总和。 有一天&#xff0c;她被下了恶毒的诅咒&#xff0c;这个诅咒的作用是将她的娱乐值变为对p…

Modis数据处理工具:MRT百度网盘下载和手把手图文安装教程

如下图所示为 MODIS Reprojection Tool(MRT)的软界面,看似简单,却是Modis遥感影像必不可少的处理工具,如投影变换等。本文以图文并茂的形式,详细讲解MRT软件在Windows10平台上的安装过程,并附MRT软件百度网盘下载地址。 Modis Tool主界面: 一、安装过程 1、安装Jav…

在微信小程序中使用“随机键盘”

最近研究微信小程序&#xff0c;发现在手机上使用系统键盘非常不方便&#xff0c;一是按键太小&#xff0c;对于小学生来说&#xff0c;操作非常不方便&#xff1b;二是系统键盘反复切换影响界面布局。于是自己决定自己写一个随机的小键盘。 原理非常简单&#xff1a;拿“口算练…

Android之提示订阅配置订阅需要传新的包 添加结算权限。

1 问题 apk上google应用市场&#xff0c;然后开通支付商品&#xff0c;错误提示如下 2 解决办法 AndroidManifest.xml里面添加谷歌支付权限 <!-- google pay --><uses-permission android:name"com.android.vending.BILLING" />