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的结构吃透之后,我们要 ...
随机推荐
- 2019-04-28——Django学习
1.Django: Python Web应用开发框架,Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后 ...
- SQL Server 2000服务器安装剖析
一.情况说明 sql server 2000以前的版本,例如7.0一般不存在多个版本,只有标准版跟桌面版,用户如果不清楚该装什么版本的话,可按安装上的安装先决条件指示安装,一般在WIN2000 服务器 ...
- 010Edit手写PE
前言PE结构DOS头IMAGE_DOS_HEADERPE头介绍总大小[248字节]结构体含义标记(4字节)0x4550文件头(20字节)扩展头(224字节)为程序添加ExitProcess函数 前言 ...
- 十四、new Comparator<T>实现多重排序结果
1.编写实现类 package com.abcd; public class Person{ private String name; private int age; private int sal ...
- position在IE下的问题
盒子设置position:absolute;后,子盒子的浮动可以不做清除浮动处理,同样,使用fixed,子盒子也不需要做清除浮动的处理 在IE7下(据说IE6也不行),盒子设置overflow:hid ...
- bootstrap treeview 树形数据生成
这个问题还是挺经典的,后台只是负责查出所有的数据,前台js来处理数据展示给treeview;show you the code below:<script> $(function () { ...
- pymysql-python爬虫数据存储准备
mongodb 和mysql 在使用哪个数据库 来存储数据上 小哥还是纠结了一下下. 很多爬虫教程都推荐mongodb 优势是速度快 因为我已经本机安装了一下 php开发环境,mysql是现成的, s ...
- SpringBoot图片上传
毕设终于写到头像上传了,本来想用Vue写来着,但是一直不顺利,还是对Vue用的不太熟.所以就用jquery写了. 首先添加以下标签 <img id="avatarPreview&quo ...
- AX_CreateAndPostSales
static void CreateAndPostSales(Args _args) { List il = new List(Types::Record); SalesTable localSale ...
- Java的xml与map,与Bean互转
xml与map互转,主要使用dom4j import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j. ...