Asp.Net Core之Identity源码学习
什么是Identity
ASP.NET Identity是构建核心 Web 应用程序(ASP.NET、登录和用户数据)的成员系统。ASP.NET核心标识允许您向应用程序添加登录功能,并可以轻松自定义有关登录用户的数据。
源码链接 Github链接

用我的话说就是一个权限管理模块,可以提供使用ef持久化储存数据的功能。包含了用户管理,角色管理,用户凭证管理,角色凭证管理,以及各种第三方登录储存。
源码结构
源码主要包含一些接口定义,然后就是接口的封装,在这里我推荐一篇很不错的文章,比我讲的都要详细。
感觉不错的文章
我们来看看源码结构

Microsoft.Extensions.Identity.Stores 和 Microsoft.Extensions.Identity.Core里面的代码是重点 尤其是Microsoft.Extensions.Identity.Core里的那些定义的接口
- IQueryableRoleStore
- IQueryableUserStore
- IRoleClaimStore
- IRoleStore
- IUserAuthenticationTokenStore
- IUserClaimStore
- IUserEmailStore
- IUserLockoutStore
- IUserLoginStore
- IUserPasswordStore
- IUserPhoneNumberStore
- IUserRoleStore
- IUserSecurityStampStore
- IUserStore
- IUserTwoFactorStore
我们以IuserRoleStore接口为例

IUserRoleStore继承了IUserStore接口 好多接口都继承了IUserStore 因为这个是关于用户的最初的接口当其他的接口都继承这个的时候我们可以通过定义一个子类继承其他接口那我们就可以实现这些接口来实现具体的功能了
说到这我们就来看一个实现了功能的类

UserStoreBase这个抽象类算是继承了好多的接口 其中就包含IQueryableUserStore接口 这个接口算是为了查找数据定义的 因为这个接口就一个Users属性
另外的UserStore接口又继承了这个UserStoreBase接口

说着这里的实现其实到这里整个调用这些实现的方法就可以用了,把他们注入到DI容器然后就可以开心的使用了,如下图。官方就是这样操作的。但是可能涉及的接口比较多,源码里就把好多的操作接口给封装成那最经典的三个类了。

在UserStore里注入了Ef的数据上下文,也就是说对数据库的增删改查在UserStore里就已经完成了。

然后就是那最重要的三个类了这三个类算是对UserStore RoleStore那些功能再次封装了,这样在使用方面就注入这个三个类就可以实现所有的功能了。具体的功能大家看看涉及的源码细节。如果有看不懂的,请看我下面的动图示例演示代码,对理解源码有帮助。
SignInManager
UserManager
RoleManager

在源码里使用了很多的将IUserStore转换成其他子接口的使用方法,这大概是叫里氏替换原则吧。大家如果想实现一套自己的,可以定义好接口然后像identity这样实现接口,然后封装成这三个类就好了。或者封装成其他的什么类。这三个类是在图上的位置注入进入的。

关于权限系统的概念,我想做的系统是有三个概念,一个用户,一个角色,一个资源,这个资源可以是声明凭证,也可以是具体的权限,也可以是一些菜单的权限,其实和identity里的claim很像。用户可以拥有很多的角色,也可以拥有很多的资源,角色也可以拥有很多的资源,用户的总资源等于角色资源和用户资源的并集。
此文章算是学习笔记了,不喜欢的求轻喷。
Asp.Net Core之Identity源码学习的更多相关文章
- ASP.NET Core 2.1 源码学习之 Options[1]:Configure
配置的本质就是字符串的键值对,但是对于面向对象语言来说,能使用强类型的配置是何等的爽哉! 目录 ASP.NET Core 配置系统 强类型的 Options Configure 方法 Configur ...
- ASP.NET Core 2.1 源码学习之 Options[3]:IOptionsMonitor
前面我们讲到 IOptions 和 IOptionsSnapshot,他们两个最大的区别便是前者注册的是单例模式,后者注册的是 Scope 模式.而 IOptionsMonitor 则要求配置源必须是 ...
- ASP.NET Core 2.1 源码学习之 Options[3]:IOptionsMonitor 【转】
原文链接:https://www.cnblogs.com/RainingNight/p/strongly-typed-options-ioptions-monitor-in-asp-net-core. ...
- ASP.NET Core 2.1 源码学习之 Options[1]:Configure 【转】
原文链接:https://www.cnblogs.com/RainingNight/p/strongly-typed-options-configure-in-asp-net-core.html 配置 ...
- ASP.NET Core 选项模式源码学习Options Configure(一)
前言 ASP.NET Core 后我们的配置变得更加轻量级了,在ASP.NET Core中,配置模型得到了显著的扩展和增强,应用程序配置可以存储在多环境变量配置中,appsettings.json用户 ...
- ASP.NET Core 2.1 源码学习之 Options[2]:IOptions
在 上一章 中,介绍了Options的注册,而在使用时只需要注入 IOption<T> 即可: public ValuesController(IOptions<MyOptions& ...
- ASP.NET Core 2.1 源码学习之 Options[2]:IOptions 【转】
原文链接:https://www.cnblogs.com/RainingNight/p/strongly-typed-options-ioptions-in-asp-net-core.html 在 上 ...
- ASP.NET Core 选项模式源码学习Options IOptions(二)
前言 上一篇文章介绍IOptions的注册,本章我们继续往下看 IOptions IOptions是一个接口里面只有一个Values属性,该接口通过OptionsManager实现 public in ...
- ASP.NET Core 选项模式源码学习Options IOptionsMonitor(三)
前言 IOptionsMonitor 是一种单一示例服务,可随时检索当前选项值,这在单一实例依赖项中尤其有用.IOptionsMonitor用于检索选项并管理TOption实例的选项通知, IOpti ...
- .NET Core 2.1 源码学习:看 SocketsHttpHandler 如何在异步方法中连接 Socket
在 .NET Core 2.1 中,System.Net.Sockets 的性能有了很大的提升,最好的证明是 Kestrel 与 HttpClient 都改为使用 System.Net.Sockets ...
随机推荐
- vue过滤器 - filters
在数据被渲染之前,可以对其进行进一步处理,比如将字符截取或者将小写统一转换为大写等等,过滤器本身就是一个方法. 过滤器可以定义全局或局部 # 全局 // 回调函数中的参数1永久是绑定的数据 Vue.f ...
- bili-emoji自定义表情包设置
使用图床上传图片.推荐使用聚合图床,简单免费 把图片的图床链接复制到一个txt文件中,如abc.txt 将abc.txt放到koishi目录的非node_modules\koishi-plugin-e ...
- Java实现延迟执行代码
Java实现延迟执行代码对于Java程序在它们的操作中添加延迟或暂停是比较常见的.这对于任务暂停直到另外任务完成执行场景比较有用.本文我们提供两类方法实现延迟执行. 1. 基于线程(Thread)方法 ...
- flutter 结合 springBoot 完成登录 注册 功能
后端接口 前端调用接口代码 import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import '../page ...
- 【干货分享】.NET人脸识别解决方案
前言 前段时间有同学在DotNetGuide技术社区交流群提问:.NET做人脸识别功能有什么好的解决方案推荐的吗?今天大姚给大家推荐2款.NET开源.免费.跨平台.使用简单的人脸识别库,希望可以帮助到 ...
- VMware 17 Exception 0xc0000094 解决
VMWare16的虚拟机升级到17时, 可能会出现虚拟机可以正常使用, 但编辑设置就会出现vmui错误的现像. VMware Workstation unrecoverable error: (vmu ...
- 嵌入式Linux如何设置获取uboot参数
--- title: 嵌入式Linux如何设置获取uboot参数 EntryName: embeded-linux-debug-get-and-set-u-boot-envarg date: 2020 ...
- Freertos学习:在Posix环境仿真FreeRTOS
--- title: rtos-freertos-在Posix环境仿真FreeRTOS date: 2020-06-11 16:22:34 categories: tags: - freertos - ...
- Python——比 Seaborn 更好的相关性热力图:Biokit Corrplot
目录 前言:我们需要更好的相关性热力图 对比 Python Seaborn 与 R corrplot 传统的 Seaborn 相关性热力图 R 语言中的相关性热力图 关于 Biokit 简介 库的安装 ...
- 【Python】用Python把从mysql统计的结果数据转成表格形式的图片并推送到钉钉群
** python把数据转为图片 / python推送图片到钉钉群 ** 需求:通过python访问mysql数据库,统计业务相关数据.把统计的结果数据生成表格形式的图片并发送到钉钉群里. 一:Cen ...