当前位置:首页 > Web开发 > 正文

" IUserTwoFactorTokenProvider "

2024-03-31 Web开发

标签:

一、前言

这方面的资料很多,反复的写没须要,但是比来一直在学习身份验证和授权相关东东,为了成体系还是写一篇,主要是从观点上理解identity系统。

参考:https://www.cnblogs.com/r01cn/p/5179506.html

二、概述

几乎所有系统都包罗用户、角色、权限、登录、注册等等,以前我们凡是是本身来实现,界说各类实体、以及对应的Repository、Service类,其实这些成果早在.net 2.0就已有实现,并且一直在进化,怎么破解qq空间访问权限文库 ,要么是因为大家不了解,要么是因为感受扩展性不强,最终使用微软供给的用户打点的人不久不多,这里就不扯以前的事了。此刻的asp.net core延续了.net framework最后一次实现的Identity,暂且称为“标识系统”吧。我的理解是它主要供给用户打点、角色打点等成果,并且供给了相关的类与身份验证系统结合,包孕长期化,还供给了很多扩展点,固然预留了很多扩展点,也供给了默认实现,就使用起来。用还是不用了解之后再做决定也不迟。

身份验证、授权、用户/角色打点这三个系统是独立的,只是授权依赖身份验证,你要判断某人能干啥,至少得让他先登录吧。所以identity系统不是必需的,但是用它比本身实现更便利。另一个原因一些开源框架对付用户、角色、权限、登录这些对象往往也是直接使用的微软原生的,只是做了些许扩展和集成。

主要观点包孕:

用户实体:IdentityUser,对应到用户数据表

用户数据操纵接口:UserStore,对用户进行CRUD和其它成果的  与数据库操纵相关的成果

用户打点器:UserManager,对用户进行CRUD和相关操纵的业务逻辑类,

登录器:SignInManager供给登录相关成果,实现identity系统和身份验证系统的结合

角色实体:类别用户

角色数据操纵接口:类别用户

角色打点器:类比用户

默认使用EF做数据库相关操纵,固然非常容易扩展。

三、IdentityUser

技术图片

系统中凡是有两种用户,

一个是asp.net框架中确当前登录用户,也就是HttpContext.User,它是ClaimsPrincipal类型。它里面相对来说属性对照少,只包罗用户id和与授权判断相关数据,好比角色

一个是我们做用户打点时的用户实体。它包罗完整的用户信息

好比像“手机号”这个字段在用户实体里必定是有的,但是没须要放进当前登录用户,因为这个字段不是每次请求都需要的。只要那些被平凡访谒的字段放进当前登录用户才对照合适。

这个用户就是用户实体,对应到数据库的用户表。用下半身也能想到它概略包罗哪些属性:id、姓名、账号、暗码、邮箱、性别、出生年月、民族、籍贯、地点、电话、巴拉巴拉.....

概略了解了啥是用户,我们来看看它对照特殊的几个点

3.1、担任布局

public class IdentityUser<TKey>    public class IdentityUser : IdentityUser<string> 

因为在设计identity系统时,不晓得将来的开发人员但愿用什么类型作为主键,所以界说成泛型。又由于大部分时候可能使用字符串(可能是对应guid),默认有个实现。

3.2、特殊字段

NormalizedUserName:标准化的用户名,默认是直接将UserName属性转换为大写,主要可能用来便利提升盘问性能的。类似的还有Email与NormalizedEmail的关系
EmailConfirmed:是否已做了邮箱确认。我们注册用户时会向用户发送一封邮件,用户进入邮箱点击邮件中的地点进行激活,此字典就是标识是否已激活了,类似的还有手机号确认PhoneNumberConfirmed
SecurityStamp:当在后台改削用户的跟安适相关的信息,好比改削了暗码,更新用户到数据库会自动更新此值,这样用户下次登录时可以判断此值变革了,要求用户从头登录。
ConcurrencyStamp:跟上面有点类似,不过主要是做并发斗嘴的,是针对整个用户所有字段更新的,好比有两个现成都在改削同一个用户,会比对此字段是否另一个用户也在改削,如果是则此中一个线程改削掉败
AccessFailedCount:登录掉败次数,多次登录掉败会锁定的成果会用到此字段。

3.3、特别观点

UserClaims:当用户做第三方登录(好比:微信、google)时,可能会获取第三方中关于用户的特别字段,这些字段就是存储在用户的Claim中的,所以这是一个一对多关系,一个用户拥有多个第三方Claim
UserLogins:用户第三方登录,记录某用户绑定的第三方登录的信息,好比openid啥的,所以也是一对多关系,一个用户可能绑定多个第三方登录
UserTokens:用户登录 发送手机验证码、或邮箱激活用的验证码之类的,也是一对多

3.x、如何扩展

界说IdentityUser子类、界说UserManager子类、界说RoleManager子类 ,由于这些还没说,所以后面讲吧

四、跟用户相关的数据操纵接口Store

技术图片

界说一堆接口来对用户进行打点,这些成果都是跟数据库操纵相关的。看看这些接口是干啥用的:

IUserLoginStore:打点用户绑定第三方登录的数据操纵相关成果,好比获取绑定的第三方登录列表

IUserClaimStore:用户做第三方登录获取的用户的第三方账号相关字段值

IUserPasswordStore:专门针对用户暗码的措置惩罚惩罚,好比设置获取某用户的暗码

IUserSecurityStampStore:

IUserEmailStore:针对用户邮箱地点的措置惩罚惩罚

略....

为毛要分隔界说呢?还是阿谁话你可以对单独的成果进行扩展。

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/29335.html