1、ASP.NET身份验证体系
.NET框架提供了多种方式来保护资源和代码不受未经过授权的用户访问。这些策略包括:“ASP.NET Web应用程序安全性”、“代码访问安全性”、以及“基于角色的安全性”等。
ASP.NET WEB应用程序安全性包括用户验证和授权两部分。所谓验证就是检查用户的身份。如果通过验证的话,授权程序开始工作。来检查该用户是否有权限来调用它所用的资源。
ASP.NET的整个安全架构包括以下三个方面:
a、身份验证
b、用户授权
c、模拟:模拟是在其他用户标识的上下文中执行代码的过程。
2.1、身份验证
在一个ASP.NET程序中,可以通过以下四种方式之一来实现身份验证功能:
a、窗体身份验证(Forms Authentication)
这是一种使用cookies来验证用户的方式。用户输入验证信息后,提交该页面。ASP.NET应用程序会根据存放在web.config配置文件或者数据库文件中的用户信息库来检验这些请求。如果用户未通过验证的话,将被服务器端重定向到一个HTML登陆窗体;如果通过验证的话,则系统会提供一个包含了用于重新获取身份的凭据或密钥的cookies,以后客户端发送的请求将在请求报头力包含该cookies。
b、Windows身份验证(Windows Authentication)
如果采用ASP.NET和IIS联合认证的话,则采用Windows 身份验证方式。IIS提供3种方式来执行身份验证,分别是:基本验证方式、简要验证方式和集成Windows 身份验证方式。在IIS身份验证完成後,ASP.NET将采用已验证的身份来进行授权访问。
c、护照身份验证(Passport Authentication)
Microsoft公司提供了一个集中的验证服务,这就是Passport Authentication。该服务可以为成员站点提供一个单独的登录和核心配置文件服务。
d、自定义身份验证方式
这种方式不采用前面3种统一提供的验证模式,而对验证的方式自己进行设计和定义,为开发人员提供较大的灵活性。
在web.config配置文件中设置身份验证模式:
1 <configuration>
2 <system.web>
3 <authentication mode="[Forms/Windows/Passport/None]">
4 </authentication>
5 </system.web>
6 </configuration>
2.2、用户授权
ASP.NET提供了两种主要方式来对用户访问的资源进行设置,它们是FileAuthorization(文件授权)和URL Authorization(URL授权)。
(1)文件授权
一般来说,文件授权仅仅和Windows 身份验证一起使用,因为它会用到Windows 2000系统中的文件安全概念。在.NET类库中,有一个类名为FileAuthorizationModule。该类可以通过Windows 的底层文件系统机制来对访问ASPX页面进行控制。
(2)URL授权
ASP.NET应用程序具有同意或者拒绝某些用户访问ASPX页面的功能。URL授权是由URLAuthorizationModule类来完成的,该类可以确保用户或者角色凭证信息与指定的映射相匹配。另外还需要通过web.config文件来完成用户和角色的配置,实例代码如下:
1 <authorization>
2 <allow users="*" verb="Get"/>
3 <deny users="Jim" roles="manger" verb="Post"/>
4 <deny users="*" verb="Post"/>
5 </authorization>
这段配置代码对用户和角色进行了配置:允许任何用户进行Get操作;而只允许Jim进行Post操作。<authorization>标记中的<allow >和<deny >元素都支持以下三个属性:
a、Roles::用来标识该元素的目标角色
b、Users:用来标识该元素的目标身份
c、Verbs:用来标识操作所用到的HTTP谓词,如:Get、Head和Post等等。
注意:
在身份标识Users中存在两种特殊的身份:“*”和“?”。其中“*”表示所以用户,“?”表示匿名用户。
另外,还可以在web.config文件中进行设置来为某个特定文件或者文件夹配置身份验证。这需要使用<location>标记。下面的代码表示拒绝用户Sam访问Manger.aspx页面:
1 <location path="Manger.aspx">
2 <system.web>
3 <authorization>
4 <deny users="Sam"/>
5 </authorization>
6 </system.web>
7 </location>
2.3、模拟
在默认情况下,一切ASP.NET应用程序代码都是在Domain\ASPNET用户表示下执行的,模拟则要完成使用其他用户标识执行ASP.NET代码的功能。这样做可以避免在ASP.NET应用程序代码中处理身份验证和授权问题。在ASP.NET中有两类模拟:配置模拟和可编程模拟。
(1)配置模拟
配置模拟允许在每个页面请求的整个持续时间内模拟一个用户。可以在ASP.NET配置文件定义中实现该种模拟行为,需要使用到web.config文件的<identity>元素。下面有几种不同的配置:
a、不使用模拟
它是web.config文件的默认配置,此时将标准的Domain\ASPNET用户账户执行代码。语法如下:
1 <identity impersonate="false">
b、模拟IIS指定用户
此项模拟已经在IIS配置中指定的账户。在IIS中可以为不同的站点设置在不同的账户运行,那么通过模拟则可以完成对不同web应用程序实现不同授权。语法如下:
1 <identity impersonate="true">
c、模拟进行选择的用户
模拟进行选择的用户可以完成对任何拥有用户名和密码的账户进行模拟。语法如下:
1 <identity impersonate="true" userName="bingo" password="123"/>
(2)可编程模拟
可编程模拟是使用可以在代码执行是切换到另一个用户标识,而在执行结束时切换到原来的标识。在.NET类库中有一个名为WindowsIdentity类,他具有一个名为Impersonate的方法。在获得账户令牌后,就要用该方法来建立模拟。整个过程分为以下3个步骤:
i、先为模拟的用户获取账户令牌。
ii、使用WindowsIdentity.Impersonate方法来建立模拟。
iii、调用WindowsIdentity.ImpersonateCall产生的Undo方法,来恢复原始的用户标识。