不过有一个需要特别注意的问题,就是无论你怎样使用.NET的安全,资源仍然是处于操作系统级的保护之下。对于受特殊保护的资源,.NET平台的安全权限是无能为力的(其实这一点也正好符合.NET与操作系统的层次关系)。
下面我们就来详细的看看基于角色的安全性中的几个概念,以及这几个概念在.NET中是如何运用的。
验证(authentication)指的是确定用户身份的过程,而授权(authorization)指的是经过上面的过程之后给予用户访问特定资源的权限,说明白一点,验证就是知道"你是谁",而授权则是"让你可以做什么"。.NET为实现这两个过程提供了Principal和Identity对象,其中,基于角色的安全性基础建立在Principal对象之上,该对象封装了当前用户的信息,既包含用户身份,也包含他所扮演的角色;用户身份用Identity对象来指明,Identity对象中不仅包含指定的用户身份信息(用户名称或账号),还包括了"如何验证这一身份"的方法。
Identity对象
Identity对象是实现了IIdentity接口的类的实例。IIdentity接口包括三个只读属性:
string AuthenticationType {get;} 获取所使用的身份验证的类型
bool IsAuthenticated {get;} 获取布尔值,该值指出登陆用户是否经过验证
string Name {get;} 获取当前用户的名称
.NET中实现了接口的有以下四个类:
1、GenericIdentity 用来表示一般性的用户,可以用于自定义登陆验证的情况。
2、WindowsIdentity 用来表示登陆Windows系统成功的普通Windows用户。
3、FormsIdentity 用来表示ASP.NET应用程序中使用Forms身份验证的用户。
4、PassportIdentity 用来表示在使用Passport的应用程序中的用户。不过要注意必须要安装了Passport SDK才能使用这个类。
因为在当前的具体开发中使用得最多的是前三个,而FormsIdentity类将在后文专门讲到,所以下面我们将详细讨论前两个类
GenericIdentity类
GenericIdentity类其实相当简单,它并不与任何特定的验证协议相关联。因此,它往往被用在采用了自定义登陆机制的场合。比如一个程序可以自己提示用户输入用户名和密码,然后到自定义的用户数据库中去查询。如果用户名和密码有效,那么程序就会创建一个基于数据库中的匹配记录的principal和(对应的)identity对象。
GenericIdentity类除了三个IIdentity接口定义的属性之外没有更多的东西了。不过,GenericIdentity类提供了两个构造函数。一个构造函数接受一个字符串参数,该参数指定的是用户名;另一个构造函数接受两个参数:第一个是用户名字符串,第二个是给定的验证类型字符串。
文章来源于领测软件测试网 https://www.ltesting.net/