宝哥软件园

ASP.NET核心身份详细介绍(一)

编辑:宝哥软件园 来源:互联网 时间:2021-09-06

在ASP.NET核心中,仍然使用ASP.NET的身份组件库,它负责验证用户的身份。一般来说,没有MVC 5那么复杂。因为MVC 5引入了OWIN,很多初学者都在苦苦学习,对identity都很迷茫,包括我在内,我在学习Identity前后花了一个多月的时间。所以大部分开发者不爱Identity,不使用,感觉被绑架了。

幸运的是,在ASP.NET核心,由于模块的逐渐清晰抽象和中间件的使用,身份的学习和使用路线变得更加平易近人。让我们一起来看看。

入门指南

在开始之前,让我们忘记它与实体框架的关系以及它与身份验证的关系。让我们先学一些英语单词。

有这么多“词”你可能需要理解:

# 1:索赔

每个人都应该知道身份证是什么样子的,如下:

其中,姓名:奥巴马;性别:男性;民族:肯尼亚;出生日期:1961年8月4日等。这些身份信息可以被视为一个接一个的键值对。如果我们想把这些东西存储在程序中,怎么设计呢?是的,您可能已经想到使用字典进行存储,一个键和一个值来满足需求。但是Key,Value不是很友好,面向对象,那么我们做一个对象会不会更好?至少,您可以使用vs的智能提示,让我们对其进行修改,并将其更改为以下内容:

//我会给这个对象起一个名字叫‘认领’。你有什么看法?公共类声明{公共字符串声明类型{ get设置;}公共字符串ClaimValue { get设置;}}ClaimType为Key,ClaimValue为Value。这样,只能存储一个键值对。此时姓名:奥巴马可以存吗?

微软的人考虑得很周到,为我们准备了一些默认的ClaimType。很多常用的都在里面。让我们来看看:

这里扩展了第一个知识点:声明类型

为了阅读体验,我只放了一些截图。你可以看到一些常用的名字,如姓名、电子邮件、性别、手机等。已经有了,还有很多。细心的读者可能已经注意到它的命名空间是System。安全。索赔,这意味着这个东西是。net框架。嗯,我们暂时只需要知道这么多。

引入Claim后,是不是很简单?我不在乎在其他地方怎么翻译。在本文中,它被称为“证书单元”。

# 2:声明实体

有了“证件单位”之后,我们就可以用它来制作身份证了,那么应该怎么制作呢?有的同学可能想过,对,就是创建一个新的对象,然后把身份证单位转入建造师,然后拿到身份证。我们给这张身份证起了一个英文名,叫“ClaimsIdentity”,看起来挺一致的。既有表明其成分的声明,也有表明其用途的标识,这是一个非常令人满意的名称。

其实在现实生活中,我们的身份证中有些信息是隐藏的,有些信息是可以直接看到的。比如你看不到你存储在新一代身份证中的指纹信息,这些信息存储在身份证内部的芯片中,比如姓名、年龄等等。当我们设计一个对象时也是如此,需要暴露一些东西,所以在这里我们的ClaimsIdentity会暴露一个Name,can等等。

我们创建的身份证的另一个重要属性是身份验证类型,依此类推。什么是身份验证类型?看起来有点眼熟。我们知道我们的身份证是干什么用的。它用来证明我们的身份。当你证明自己的身份并展示出来的时候,它其实有很多载体的形式。你什么意思?比如可以直接取出实物形式的身份证,也可以是纸质形式的复印件,或者是电子形式的电子码等。此时,您需要有一个类型字段,可以指示其存在形式。是的,此身份验证类型用于此目的。

然后我们正在给我们的身份证增加一些润色,让它看起来更好看,比如提供一些方法来添加理赔、删除理赔、写入二进制流等等。最后,我们的身份证对象基本上是这样的:

public class声明标识的名称{public声明标识(ienumerablelaim){ }//太重要了,别人不能随便更改,所以我不允许设置,只是我儿子有我的姓,所以是一个虚拟的public虚拟字符串Name { get}公共字符串标签{ get设置;}//这是我的证件类型,也很重要。还禁止设置公共虚拟字符串身份验证类型{ get}公共虚拟无效AddClaim(索赔声明);公共虚拟无效移除声明(声明声明);公共虚拟无效FindClaim(索赔声明);}嗯,在这里,我们的身份证看起来很完美,但是从面向对象的角度来看,似乎有所缺失。对于~,或者说抽象,我们需要抽象一个接口来进行一些约束,什么约束?既然是证书,肯定会涉及到这些属性信息:

1.名字。2.打字。3.证书是否合法。

界面中反映的文字如下。让我们给这个接口起个名字:“IIdentity”:

这里扩展了第二个知识点:IIdentity接口。

//定义证书对象的基本功能。公共接口标识{ //证书名称字符串名称{ get}//用于标识证书的承运人类型。字符串身份验证类型{ get}//是否合法证书。bool IsAuthenticated { get}}所以我们的ClaimsIdentity最终似乎定义如下:

引入公共类后声明标识:i标识{//.},很容易找出是否是。我不在乎在其他地方如何翻译。本文称之为“身份证”。

第3名:ClaimsPrincipal

有了身份证,我们可以证明我就是我。有时候一个人有很多身份证。猜猜这个人是做什么的?是的,不是黄牛就是骗子。

然而,有时候一个人还有很多其他的身份。猜猜这个人是做什么的?这很正常,对吧?比如,你可以同时做老师、妈妈和商人。如果你想同时证明你有这些身份,你可能需要出示你的教师证明、孩子的出生证明和法定代表人的营业执照。

在节目中,身份证不仅代表你,还代表一个身份,是证明自己的主要身份。如果一个人有很多其他身份,那么这个时候就需要有东西(载体)来承载这些文件,对吗?好,让我们给需要携带证书的对象取一个合适的名字,叫做“ClaimsPrincipal”。

下面是字典中的Principal一词给出的解释。我认为你可以使用它:

校长['prnspl]

主要;主要;首都的

名词(noun的缩写)主任;校长;资本;聚会

这时,有些同学可能会问,应该叫ClaimsIdentityPrincipal吗?嗯,我也觉得应该叫ClaimsIdentityPrincipal,可能更好。可能微软人比较懒,缩写为ClaimsPrincipal。

知道了它的功能之后,代码就很容易写了,和上面的ClaimsIdentity是一样的例程:

Public class ClaimsPrincipal {//将您拥有的所有证书交给主体公共声明主体(ienumerableidentity identity){ }//主体公共虚拟I标识的主体标识{ get}公共虚拟IEnumerableClaimsIdentity} public virtual void AddIdentity(ClaimsIdentity identity标识);//为什么没有RemoveIdentity?让大家好好想想。}当时的人看起来几乎是完美的,但我们还是要抽象一下。哪些东西应该抽象?作为当事人,你要有一个主要的身份,那就是你的身份证,你可能还会用到一个角色(这个角色后面会详细介绍,所以你可以知道这里有这么一个东西)。

这里扩展了第三个知识点:IPrincipal接口。

公共接口IPrincipal {//iiidentity Identity { get;}//是否属于某个角色bool IsInRole(字符串角色);}然后,我们的ID客户端应该是这样的:

公共类要求主体: iprincipal {//.}理赔本金已经介绍了,是不是很简单?我不在乎它在其他地方是如何翻译的。在本文中,它被称为“证书方”。

现在,我们已经知道了“索赔”、“索赔实体”和“索赔建议”,并理清了它们之间的逻辑关系,趁热打铁。下图是身份登录部分的不完整示意图,带虚线圆圈的部分要理解。

可以看到,首先我们在app端有一些证书单元,然后调用ClaimsIdentity将证书单元初始化为一张身份证,然后将身份证交给证书方保管。

刚写完《入门》,发现已经这么久了,打算写一个系列,可能3-4篇。

摘要

好了,这篇文章先介绍到这里。在这个博客中,我们学习了几个英语单词,我们知道这些英语单词在程序中扮演什么样的对象。根据图,我们知道这些对象在整个认证系统中的位置。我发现光靠这个博客搞清楚身份是不够的。在下一篇文章中,我们将剥去的茧。NET认证中间件,直到我们掌握整个认证系统的。NET,然后我们来看看Identiy和Entity框架之间的爱恨情仇。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+