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框架的更多相关文章

  1. Owin+ASP.NET Identity浅析系列(三)框架结构分析

    在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 前两篇博客仅仅说了下功能如何 ...

  2. 全新的membership框架Asp.net Identity(1)——.Net membership的历史

    在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp.net Identity. 每一次改 ...

  3. 框架Asp.net Identity

    框架Asp.net Identity 在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp ...

  4. 微软的权限框架Asp.Net Identity

    Asp.Net Identity 深度解析 之 注册登录的扩展   关于权限每个系统都有自己的解决方案,今天我们来讨论一下微软的权限框架Asp.Net Identity ,介绍如下  http://w ...

  5. 如何基于asp.net core的Identity框架在mysql上作身份验证处理

    首先了解这个概念,我一开始也是理解和掌握基本的概念,再去做程序的开发.Identity框架是微软自己提供,基于.net core平台,可拓展.轻量 级.面向多个数据库的身份验证框架.IdentityS ...

  6. 全新的membership框架Asp.net Identity

    在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp.net Identity. 每一次改 ...

  7. ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 框架 前面我们使用了 N 多个章节, ...

  8. 全新的membership框架Asp.net Identity(2)——绕不过的Claims

    本来想直接就开始介绍Identity的部分,奈何自己挖坑太深,高举高打的方法不行.只能自己默默下载了Katana的源代码研究了好一段时间.发现要想能够理解好用好Identity, Claims是一个绕 ...

  9. 从Membership 到 .NET4.5 之 ASP.NET Identity

    我们前面已经讨论过了如何在一个网站中集成最基本的Membership功能,然后深入学习了Membership的架构设计.正所谓从实践从来,到实践从去,在我们把Membership的结构吃透之后,我们要 ...

随机推荐

  1. tensorflow实现二分类

    读万卷书,不如行万里路.之前看了不少机器学习方面的书籍,但是实战很少.这次因为项目接触到tensorflow,用一个最简单的深层神经网络实现分类和回归任务. 首先说分类任务,分类任务的两个思路: 如果 ...

  2. 安装mysql后,sql语句中表名区分大小写的问题

    今天安装完mysql后,执行查询语句select * from user,结果报user表不存在,但是实际是存在的,查了一下才知道是因为mysql的my.cnf文件中少了一个大小写敏感的配置,若不配置 ...

  3. github 生成配置ssh 秘钥方法详解

    如果安装github成功后,当从本地提交文件到github的时候,提交不成功,报错,可能问题就是你还没有生成ssh秘钥 1.当你提交文件到github,不成功,出现如下的情况,就代表着github上面 ...

  4. Redis数据类型-Strings

    Redis 简介 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI ...

  5. laravel-更换语言包

    第一步:找语言包 找到比较靠谱的语言包(根据下载量与收藏量综合判断),而且要是laravel的 扩展的链接:https://packagist.org/packages/caouecs/laravel ...

  6. Vue实现跑马灯的效果

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. linux常用命令简介

    不管是测试还是开发,平时或多或少都要用到Linux命令,下面就把平时必用的一些命令简单总结哈,快学快用 1.   ls : 列举当前目录下文件.子目录的名字,如图举例: (1)  ls  -l  : ...

  8. oracle 索引提升查询速度, in 和 exist 效率

    做记录: 今天有一个有153万条数据的表,发现查询很慢: select count(y) as transfereeNum,x from t_ast_subject_invest_order GROU ...

  9. c语言01次作业--分支,顺序结构

    C语言--第01次作业 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 本章学习让我体会良多.首先,不得不承认自己是一个非常马虎的人.常见的问题就是输出格式上常因为没有与题目要 ...

  10. 学习java之路 简单日历查询代码

    /** * 31天的 1, 3, 5, 7, 8, 10 ,12 30天的 4, 6,9,11 28天(平年) 2 29天(闰年) 2 */ class Demo{ public static voi ...