当前位置: 首页 > news >正文

.net core 源码_ASP.NET Core之Identity源码学习

(给DotNet加星标,提升.Net技能)

转自:GreenShade cnblogs.com/GreenShade/p/13654516.html

一、什么是Identity

ASP.NET Identity是构建核心 Web 应用程序(ASP.NET、登录和用户数据)的成员系统。ASP.NET核心标识允许您向应用程序添加登录功能,并可以轻松自定义有关登录用户的数据。

源码链接:https://github.com/dotnet/aspnetcore/tree/master/src/Identity

bc65330e97b42e813af46ce1bc5629d8.png

用我的话说就是一个权限管理模块,可以提供使用ef持久化储存数据的功能。

包含了用户管理,角色管理,用户凭证管理,角色凭证管理,以及各种第三方登录储存。

二、源码结构

源码主要包含一些接口定义,然后就是接口的封装,在这里我推荐一篇很不错的文章,比我讲的都要详细

https://www.cnblogs.com/savorboard/p/aspnetcore-identity3.html。

我们来看看源码结构

f2cf9a7d8788de39a6e2bf9e38a9526f.png

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接口为例

e80e2322c888ef7dc5c2845b835292a2.png

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

说到这我们就来看一个实现了功能的类

8d5cbd4805f90fc4c80401757712ab91.png

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

另外的UserStore接口又继承了这个UserStoreBase接口

02a47f5f27aac50e15084bb6f1335634.png

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

13a9e291521b73110a512c8d90b2e4d8.png

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

cb919dc90319181386109ae50164d6c4.png

然后就是那最重要的三个类了这三个类算是对UserStore RoleStore那些功能再次封装了,这样在使用方面就注入这个三个类就可以实现所有的功能了。

具体的功能大家看看涉及的源码细节。如果有看不懂的,请看我下面的动图示例演示代码,对理解源码有帮助。

  • SignInManager

  • UserManager

  • RoleManager

4ab54427e00edc570639f3d967ba4999.gif

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

bdaef0518131a72a02dd49ba30040791.png

关于权限系统的概念,我想做的系统是有三个概念,一个用户,一个角色,一个资源,这个资源可以是声明凭证,也可以是具体的权限,也可以是一些菜单的权限,其实和identity里的claim很像。

用户可以拥有很多的角色,也可以拥有很多的资源,角色也可以拥有很多的资源,用户的总资源等于角色资源和用户资源的并集。

- EOF -

967c944e978bbaa705b364f6d438ba3b.png

推荐阅读   点击标题可跳转

C#中的is真的是越来越强大,越来越语义化

ABP+WorkflowCore+jsplumb实现工作流

遍历Dictionary,你会几种方式?

看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能 

ca3bf5148165133905c63381b9552ed5.png

好文章,我在看❤️

相关文章:

  • python md5加密解密_【已解决】Python中如何实现MD5的加密计算
  • float在python中的书写形式错误的是_python实现float/double的0x转化
  • angular js 使用pdf.js_【新年跳槽必备】2020最新(前端Angular.Js专题)面试题 速领!...
  • 使用dbutils
  • idea怎么运行jsp页面_【学习笔记】Jsp与Servlet技术
  • 获取js渲染后的html_关键渲染路径
  • python merge on多个条件_Python数据核对系列之2—power query VS pandas
  • C语言使用递归法计算n的阶乘
  • python解释器与编译环境_python入门之解释器环境安装
  • HDU 1299 基础数论 分解
  • simpledateformat格式_2020 年,你还在使用 Java 中的 SimpleDateFormat 吗?
  • 人生苦短我学python谁说的_人生苦短,我学python
  • [PY3]——logging
  • python笔记视频_python视频笔记之三(循环和函数)
  • 洛谷P3003 [USACO10DEC]苹果交货Apple Delivery
  • 【剑指offer】让抽象问题具体化
  • 【面试系列】之二:关于js原型
  • 10个最佳ES6特性 ES7与ES8的特性
  • canvas 绘制双线技巧
  • CAP理论的例子讲解
  • Github访问慢解决办法
  • Java知识点总结(JavaIO-打印流)
  • JSDuck 与 AngularJS 融合技巧
  • php的插入排序,通过双层for循环
  • ReactNative开发常用的三方模块
  • Redash本地开发环境搭建
  • 试着探索高并发下的系统架构面貌
  • 双管齐下,VMware的容器新战略
  • 微信小程序实战练习(仿五洲到家微信版)
  • 小程序01:wepy框架整合iview webapp UI
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 在weex里面使用chart图表
  • hi-nginx-1.3.4编译安装
  • ionic异常记录
  • MyCAT水平分库
  • ​linux启动进程的方式
  • ​你们这样子,耽误我的工作进度怎么办?
  • #DBA杂记1
  • #define用法
  • #NOIP 2014# day.1 T2 联合权值
  • $.ajax()参数及用法
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (力扣)循环队列的实现与详解(C语言)
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .Net Memory Profiler的使用举例
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [Android]How to use FFmpeg to decode Android f...
  • [C语言]——分支和循环(4)
  • [Django开源学习 1]django-vue-admin