ASP.NET安全架构-如何实现.NET安全
前言:大家是否在用Forms验证的时候,常常被很多的概念搅混?是否真的明白什么是Principal,Identity,以及IPrincipan...?很多的文献很少提及这些到底是什么,仅仅是怎么用,结果出问题,导致很多的朋友的理解仅仅停在表面,使用起来也是束手束脚。相信看完本篇,会有一定的收获的。 ASP.NET安全架构为实现Web应用程序的安全模式提供了对象模型。不管我们选择哪一种的身份验证模式,其中很多的要素是相同的。登录到应用程序的用户按照他们提供的凭证被授予Principal和Identity。其中Principal对象表示的是用户的当前的安全上下文,包括用户的标识和他们所属的角色。Identity对象表示的是当前用户。Principal对象是利用Identity对象(表示用户的标识)创建的,而且它添加一些额外的信息,比如角色或者自定义的数据。 简言之:Principal=Identity+角色+自定义数据 大家要注意一点:身份验证是发生在ASP.NET运行的特定的时期的,记住这一点,具体的以后会讲的。 下面我们具体的谈: 一 表示安全的上下文 Identity对象表示的是通过身份验证的用户。Identity对象的类型取决于所使用的身份验证,如,Windows身份验证使用的是 WindowsIdentity对象,而Froms验证使用的是FormsIdentity对象。 大家开始接触Identity概念有点难受,其实说白了Identity就是一个用户的标识,标识是什么?就是标明用户是什么,用户名字是什么而已,只是我们这里说的比较专业一点点而已。 另外,Principal对象表示的是通过身份验证的用户的组或者角色的成员:也就当前用户安全上下文。说安全上下文,说白点就是这个对象包含很多的用户身份的一些信息。Principal对象是有IIS中的Windows 身份验证自动的创建的,但是我们也可以创建普通的Principal对象(大家后面就慢慢明白的). 大家在编程的时候,或多或少用过HttpContent.Currrent.User属性,其实它表示的就是一个Principal对象.Principal对象是实现了IPrincipal接口的。 IPrincipal 接口 不同的身份验证模式对安全的上下文有不同的要求。我们可以利用Principal对象表示当前的安全上下文。IPrincipal接口定义了Principal对象的基本功能。而且我们还可以自定义安全的上下文对象,只要实现System.Security.Principal接口: Identity属性--可以获取当前Principal对象的Identity.之前说过:Principal包含Identity就是这个原因。 IsInRole(string roleName)方法--可以判断当前的Principal对象是否属于指定的角色。大家在变成时候也用过类似的HttpContent.Current.User.Identity.IsInRole("Admin")语句。 Principal对象可以通过HttpContent.Current.User属性访问到,下面的代码大家应该都用过的:
(注:Identity是用户的标识,包含用户名。我们后面会讲的) 下面的代码就更加的常见了:判断当前的用户是否是管理员角色
接着我们就看看ASP.NET内置的实现了IPrincipal接口的对象: GenericPrincipal类 GenericPrincipal类实现了IPrincipal接口。从名字可以看出GenericPrincipal对象表示的是一个一般的,基础的安全上下文,它仅仅只是定义了当前用户的角色,也就是说这个对象只是部分的实现了IPrincipal接口。(以后我们就把实现IPrincipal接口的对象称为 主体)。对于一种身份验证模式来讲,如 Windows身份验证,它使用的就是WindowsPrincipal,因为WindowsPrincipal更加具体的实现了IPrincipal。而在Forms验证中,用的只是一般的GenericPrincipal。也就是说,我们可以按照我们 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |