什么是 Identity
Identity 在英文中的意思是:身份、标识,通俗易懂一些说白了就是用户管理。基本上每一个系统都绕不开这个功能,用户、权限的管理。
AspNetCore 的 Identity 有以下特点:
- 包含了用户管理、角色管理、权限管理以及认证与授权机制;
- 它是一个框架,不是一个完整的系统,你也可以认为是一个中间件;
- 它面向的是开发人员,不是业务人员和用户;
AspNetCore Identity 的前世今生
在 Asp.Net 时代,微软就已经打造了一款包含用户、角色、权限、认证和授权的框架,它的名字叫 AspNet Membership。老一辈的程序员可能听过,但真正使用过的可能很难寻觅,基本上都是项目团队自己开发的。
Membership 在 Asp.Net 时代,也就是 WebForm 的时代,一直到 V3 的版本,后来有了 MVC ,微软才重新命名为 AspNet Identity;
然后随着 AspNetCore 的普及,Identity 框架也随之迁移到了 AspNetCore 平台上,我们成为 IdentityCore。
当你看 IdentityCore 源码时,你会发现下图这样的程序集
这也就表明,底层结构还是延续了 AspNet Identity 的程序。
以后我都将 AspNetCore 的 Identity 称之为 IdentityCore。
愿景
我不是来说如何使用 IdentiyCore 框架,因为在博客园随便搜索一下,就能找到很多的博客,而且他们写的都比我好很多。但真正深入该框架的人好像很少,所以我这一套系列的文章主要是来教各位如何进行基于 IdentityCore 框架来进行二次开发,去实现自己的特殊逻辑,以及一些源代码的解析。
IdentityCore 毕竟是微软老外们针对于欧美国家来编写的框架,在一定程度上并不能满足我们天朝这样的互联网体系,所以当你明白了整套框架的内部结构和原理,我希望也有人可以基于 IdentityCore 搭建出符合天朝的认证框架。
为什么我不这么做?因为我木有时间啊…上有老,下有小,只能寄希望于后辈们了。
拯救世界和平的任务就交给你们了
这个源码地址已经转移到了 https://github.com/aspnet/AspNetCore
IdentityCore 的核心包
打开 www.nuget.org 这个网站,输入【Microsoft.AspNetCore.Identity】,你会发现有很多相关的包,但真正核心的包只有下面几个:
-
Microsoft.Extensions.Identity.Core
该程序集包含了整个 IdentityCore 框架的实体定义,大致包含IdentityUser
(用户)IdentityRole
(角色)IdentityUserRole
(用户与角色的关联)IdentityUserClaim
(用户的声明)IdentityRoleClaim
(角色的声明)IdentityUserLogin
(用户第三方登录) ,也可以理解成数据库的表。 -
Microsoft.Extensions.Identity.Stores
该程序主要用于对上面的实体进行基本的增删改查,包括用户管理(UserManager
)和角色的管理(RoleManager
),以及一些可以进行的配置,比如用户名的限制、密码的验证等等。具体的存储实现需要下载其他的包,比如Microsoft.AspNetCore.Identity.EntityFrameworkCore
这是使用 EF Core 对数据存储的实现。 -
Microsoft.AspNetCore.Identity
该程序集用于在 AspNetCore 的项目中对对认证和授权进行管理,也包括了对于 AspNetCore 项目中的基本配置,比如要使用 Identity 框架,就需要在ConfigureServices
方法中执行services.AddIdentity<TUser>()
这样的方法。
关于二次开发
基本上的二次开发都是基于以上几个核心的包,如果你想要 IdentityCore 支持其他 ORM 框架,比如 Dapper ,那你就基于 Microsoft.Extensions.Identity.Stores
这个包去二次开发,或者一些业务逻辑不符合你的特殊需求,也是使用这个包来开发;若你想要扩展字段,则需要 Microsoft.Extensions.Identity.Core
这个程序包,继承相关的类即可;
具体的将会在接下来的章节慢慢去讲解,如果你想成为大神,请自己写框架,而不是只会使用。
学习目录
- 初级
- 菜鸟入门
- 配置详解
- 简单二次开发
- 进阶
- UserManager 解析
- RoleManager 解析
- Validator 解析
- SignInManager 解析