Asp.net Identity框架
Identity提供基于用户和角色的membership管理框架,基本上可以满足业务项目登录操作的所有功能需求。
如果要使用这套框架需要新建User和Role类型分别继承自IUser<TKey>和IRole<TKey>,以后所有的操作都是以这两个类为基础的。
1.框架的设计思路是很简单的,新建了一系列的Store接口为实体类或者说数据库Table的直接操作接口,比如说如果我们实现了IUserPasswordStore<TUser, in TKey> ,那么所有对密码的直接操作方法都是定义在这个接口里面,IUserRoleStore<TUser, in TKey>接口定义了UserRole表的操作方法,我们可以很轻易的关联用户和角色。框架定义了很多这样的Store包含了UserClaims,Email,Lockout,PhoneNumber等等所有我们在用户管理操作中可能使用到的操作逻辑,并且有一个统一的UserStore实现类实现上面定义的所有Store接口。默认实现是定义了一个IdentityDbContext注入到UserStore的构造方法里面这样可以通过IdentityDbContext的IDbSet<TUser>和IDbSet<TRole>等等属性完成对数据库的操作。在实际生成环境中会自定义一个UserStore并注入到Ioc容器中,并且在该自定义UserStore的构造函数中依赖注入所有相关的IRepository这样就可以很好的使用领域分层中仓储层的设计了,我们也可以定义一些自己的Store接口比如说IUserPermissionStore来满足权限验证。

2.为了方便对User的操作,框架定义了一个UserManager类型,依赖上面所说的UserStore完成对用户的所有操作逻辑。比如增删改查User记录,修改密码,锁定账号,创建ClaimsIdentity
3.Identity本身的设计思路真的是很简单的,但是他的一些代码实现是很具有参考价值的我们可以应用到自己的框架或者业务项目中,比如我们在生成邮件验证Token的时候都是只有几分钟的有效期,这需要我们将时间信息也添加到Token中,验证的时候会带上时间的验证,Rfc6238AuthenticationService就很好的为我们提供了这样的实现,它的GenerateCode和ValidateCode设计更加的简洁实用。
此外有的时候我们需要在Task任务的Continue后续任务执行环境中使用外层的Culture信息而不是Task任务的,框架就为我们提供了这样一个Task的扩展实现

很多的时候我们需要根据一个实例和一些特殊的条件来生成一个唯一标识的字符串,必要的时候还能获取获取到里面的各个具体的数据值,这个时候使用简单的序列化就很难满足要求了,框架中为我们提供了一个很好的实现


4.另外通读源码后了解到它的一些具体实现细节和扩展功能,可以使得我们更加放心大胆的使用来提高项目的逼格和效率了。
比如说我们根据登录成功后获取到的User记录来创建ClaimsIdentity使用的是UserManager下的IClaimsIdentityFactory<TUser, TKey>属性,我们可以自定义一个这样的Identity工厂类来完全自定义生成的ClaimsIdentity,同时默认的工厂实现会给生成的ClaimsIdentity添加UserId,UserName,Roles以及User相关的Claim。我们可以根据这个实现来获取自己所需要的数据,甚至重构自己的实现(不再使用缓存来保存Profile信息,使用IUserClaimStore保存到Claim表中,这样会自动带入到ClaimsIdentity中)

又或者Identity框架为我们实现了一个IdentityFactoryMiddleware可以很方便的在每次Request的生命周期内创建和Dispose一个对象,避免频繁的创建实例所带来的性能消耗


另外IdentityFactoryMiddleware还给我们提供了一个DataProtectionProvider参数方便我们在创建实例的过程中加密解密数据

(纯粹是为了下个月找工作而准备的一系列博文,每一篇都尽量精简,并非给初学者看的☺)
Asp.net Identity框架的更多相关文章
- Owin+ASP.NET Identity浅析系列(三)框架结构分析
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 前两篇博客仅仅说了下功能如何 ...
- 全新的membership框架Asp.net Identity(1)——.Net membership的历史
在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp.net Identity. 每一次改 ...
- 框架Asp.net Identity
框架Asp.net Identity 在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp ...
- 微软的权限框架Asp.Net Identity
Asp.Net Identity 深度解析 之 注册登录的扩展 关于权限每个系统都有自己的解决方案,今天我们来讨论一下微软的权限框架Asp.Net Identity ,介绍如下 http://w ...
- 如何基于asp.net core的Identity框架在mysql上作身份验证处理
首先了解这个概念,我一开始也是理解和掌握基本的概念,再去做程序的开发.Identity框架是微软自己提供,基于.net core平台,可拓展.轻量 级.面向多个数据库的身份验证框架.IdentityS ...
- 全新的membership框架Asp.net Identity
在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp.net Identity. 每一次改 ...
- ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 框架 前面我们使用了 N 多个章节, ...
- 全新的membership框架Asp.net Identity(2)——绕不过的Claims
本来想直接就开始介绍Identity的部分,奈何自己挖坑太深,高举高打的方法不行.只能自己默默下载了Katana的源代码研究了好一段时间.发现要想能够理解好用好Identity, Claims是一个绕 ...
- 从Membership 到 .NET4.5 之 ASP.NET Identity
我们前面已经讨论过了如何在一个网站中集成最基本的Membership功能,然后深入学习了Membership的架构设计.正所谓从实践从来,到实践从去,在我们把Membership的结构吃透之后,我们要 ...
随机推荐
- Python学习笔记4基本数据类型续
start 16:36 时间格式化 程序计时:指测量起止动作所经历的时间的过程 实例四文本进度条 #a表示星号被复制的的次数 文本进度条的动态刷新 实现刷新功能的简单代码,但你会发现并没有实现在同一 ...
- c# 判断当前版本是Debugger或Release
1.第一种 (常用) #if DEBUG //debugger 环境 #else //release 环境 #endif 2. 第二种 private bool IsDebug() { Assembl ...
- 好用的.NET控制台测试项目
在工作和学习上,我们经常需要创建项目,引用些其他的库,测试下自己的想法是否正确,需要捕捉一下异常.调用一下异步方法.记录一下log等等,这样的项目都是需要花费时间,为了较少花费的时间,产生了一个这样的 ...
- 设计模式之装饰者模式-java实例
设计模式之装饰者模式 需求场景 我们有了别人提供的产品,但是别人提供的产品对我们来说还不够完善,我们需要对这个产品的功能进行补强,此时可以考虑使用装饰者模式. 我们已经有了产品,而且这个产品的功能非常 ...
- tcp拥塞控制 tahoe reno new reno sack
http://www.docin.com/p-812428366.html http://www.docin.com/p-812428366.html
- cnblog测试
文字测试 图片测试
- ClassLoader的工作机制
本文中主要介绍类加载器的工作机制 一:首先什么是类加载器? 类加载器就是用来加载java类到java虚拟机中.java源程序经过编译之后形成字节码文件,类加载器将字节码文件加载到内存中,并转换成jav ...
- Sketch 画原型比 Axure 好用吗?为什么?
对工具而言,个人觉得没有说哪个工具好用不好用之分,更重要一点,做设计的来讲什么时候用什么工具来提高工作效率,这个最重要.下面我也来讲讲这二款工具的不同之处: Axure算是原型工具里的 Old Sch ...
- AX_CreateAndPostPurch
static void CreateAndPostPurch(Args _args) { List il = new List(Types::Record); DocumentNum Document ...
- Dom4j 封装DOM和SAX 的方法
Dom4j 封装DOM的解析XML文件的方法: List<Book> bookList=new ArrayList<Book>(); //1.1 建立一个解析器工厂: Docu ...