绝心虐恋,神兵玄奇漫画,台儿庄战役简介
目录
@
有三个重要的类claim, claimsidentity, claimsprincipal,我们以一个持有合法证件的学生bob做比方,claimsprincipal就是持有证件的学生bob,claimsidentity就是学生bob的证件驾照,claim就是bob驾照中的各种信息。
下边就开始围绕上边这段话展开描述:
在开始学习标识管理系统(identity system)之前,很有必要搞清楚什么是基于声明的身份认证。
我们假设一个场景。bob是一名大学生,准备去银行为自己开户。银行工作人员需要bob提供他的有效证件,于是bob就把自己的驾照提供给了银行工作人员。银行工作人员可以从驾照上获取到bob的个人信息,例如姓名、出生日期和地址等。
bob希望能够享受到银行针对大学生的优惠政策,于是银行工作人员又请bob提供了学生证,同时从上边可以获取到姓名、所在的大学名称、院系以及学号等信息。(这里提供别人的学生证一定是不行的!)
使用以上生活中典型的应用场景,可以帮助我们进一步去理解基于声明(claims-based authentication)的身份认证。这个例子中bob拥有两个标识(identity,就相当于有效的身份证明,即证明你是你的那张纸,也就是identity):驾照+学生证。(当然还可以提供更多的identity,比如护照、户口本等等。)
好吧,我自己用文字越写越怕不明白,通过上边的这些文字,只需要清楚这么几点内容:
claim可以是姓名、出身日期、地址、所在大学、学号等等信息
一个人可以拥有很多个identity
bob去开户,先提供了一个identity(这里就是驾照),接着又提供了一个identity(学生证)
清楚了这些,我们继续看
asp.net core 是开源的,这能够让我们非常方便的去学习和理解它是如何构成并运行的。源码可以。
可以把源码下载下来,然后查看源码,路径为:
corefx-master(解压后主文件夹)/src/system.security.claims/src/system/security
一个用户(user)被声明成claimsprincipal类型(继承自iprincipal接口)。claimsprincipal类来自system.security.claims命名空间。
public class claimsprincipal : iprincipal { ........... ........... public virtual iidentity identity { get; } public virtual ienumerable<claimsidentity> identities { get; } public virtual ienumerable<claim> claims { get; } ........... ........... public virtual bool hasclaim(predicate<claim> match); public virtual bool hasclaim(string type, string value); public virtual bool isinrole(string role); ........... ........... }
从claimsprincipal类中可以看到有一个返回类型为claimsidentity集合的identities属性,代表着一个user可以拥有多个identity。
在这里的另外一个属性identity,不要被迷惑,他返回的是claimsprincipal中主要的(如果有多个)那一个claimidentity。
另外一个重要的属性claims,它返回了一个在claimsprincipal中所有的claimsidentity所包含得全部claims的集合。
在这里还是要再次明确一下:
姓名:bob
就是一个claim,生日:2009.9.15
这也是一个claim。其中姓名或生日就是这个claim的一种类型,即claimtype。... var claimsidentity = new claimsidentity(new claim[] { new claim(claimtypes.name, loginname) }, "basic"); var claimsprincipal = new claimsprincipal(claimsidentity); await context.authentication.signinasync(_cookieauthoptions.authenticationscheme, claimsprincipal); ...
要用cookie代表一个通过验证的主体,必须包含claim, claimsidentity, claimsprincipal这三个信息,以一个持有合法驾照的人做比方,claimsprincipal就是持有证件的人bob,claimsidentity就是证件驾照,"basic"就是证件类型(这里假设是驾照),claim就是驾照中的信息。
如果感觉困扰,可以再看下
这篇教程中,语言啰嗦之处还请见谅指证,因为自己在理解的时候花了不少时间,就怕解释不清说不清!
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Net Core Web Api项目与在NginX下发布的方法
asp.net core3.1 引用的元包dll版本兼容性问题解决方案
IdentityServer4实现.Net Core API接口权限认证(快速入门)
ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现
网友评论