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 ...
随机推荐
- ETL工具-nifi干货系列 第十二讲 nifi处理器UpdateRecord使用教程
1.上一节课我们讲解了nifi处理器UpdateAttribute,专门用来更新flowFile的属性字段.本节课我们一起来学习UpdateRecord,该处理器用来更新flowFile的流文件内容数 ...
- 轻松实现H5页面下拉刷新:滑动触发、高度提示与数据刷新全攻略
前段时间在做小程序到H5的迁移,其中小程序中下拉刷新的功能引起了产品的注意.他说到,哎,我们迁移后的H5页面怎么没有下拉刷新,于是乎,我就急忙将这部分的内容给填上. 本来是计划使用成熟的组件库来实现, ...
- Java与React轻松导出Excel/PDF数据
前言 在B/S架构中,服务端导出是一种高效的方式.它将导出的逻辑放在服务端,前端仅需发起请求即可.通过在服务端完成导出后,前端再下载文件完成整个导出过程.服务端导出具有许多优点,如数据安全.适用于大规 ...
- Flash驱动控制--芯片擦除(SPI协议)
摘要: 本篇博客具体包括SPI协议的基本原理.模式选择以及时序逻辑要求,采用FPGA(EPCE4),通过SPI通信协议,对flash(W25Q16BV)存储的固化程序进行芯片擦除操作. 关键词:SPI ...
- 使用Microsoft.SemanticKernel基于本地运行的Ollama大语言模型实现Agent调用函数
大语言模型的发展日新月异,记得在去年这个时候,函数调用还是gpt-4的专属.到今年本地运行的大模型无论是推理能力还是文本的输出质量都已经非常接近gpt-4了.而在去年gpt-4尚未发布函数调用时,智能 ...
- Kubernetes(五) Pod控制器详解
Pod控制器详解 本章主要介绍Pod控制器的详细使用 1. Pod控制器介绍 在kubernetes中,按照pod的创建方式可以将其分为2类: 自主式pod:kubernetes直接创建出来的pod, ...
- 在Linux中使用crontab
背景 虽然不是专业运维,但是在嵌入式开发中还是需要懂一点的.部门内部搞服务器最厉害的就是我了,汗. 参考: https://blog.csdn.net/longgeaisisi/article/det ...
- uboot 添加 自定义命令
--- title: uboot-uboot 添加 自定义命令 date: 2020-05-13 16:51:38 categories: tags: - uboot - cmd - config - ...
- VS图片
- 算法金 | 致敬深度学习三巨头:不愧是腾讯,LeNet问的巨细。。。
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 读者参加面试,竟然在 LeNet 这个基础算法上被吊打~ LeNe ...