ASP.NET提供一个很健壮的安全系统,ASP.NET的安全性和性能有很深的关系,利用ASP.NET的安全机制可以从每个Web页面的顶端编写安全检查代码的工作解放出来,安全检查有核心的ASP.NET子系统完成。
当IIS收到请求时,它首先查看资源是如何受保护的,资源可以用户匿名访问保护,或者用标准的本地或活动目录证书保护。IIS通过标准的访问控制列表(ACL)查看用户对请求的资源十分有访问权限。如果任何一项检查失败,IIS甚至在请求到达ASP.NET之前就拒绝访问。在这个过程中发生了两件事,用户被身份验证(在匿名访问时事通过标准的IUSER_<machine-name>账号进行身份验证),然后被授权(通过对照ACL检查身份验证证书) 。
如果一个ASP.NET资源(ASP.NET页面,用户控件或Web服务)被请求,IIS对请求进行了身份验证并授权,下一步是由ASP.NET提的自己的身份验证和 授权。
IIS和ASP.NET身份验证/授权的安全进程:
ASP.NET在应用程序中用户身份验证有:Windows身份验证,Form身份验证,Passprot身份验证。Windows身份验证提供与传统的Windows账号(或者是活动目录账号或者本地账号)的集成。该模式的工作方式和正常的IIS身份验证相同。在这种模式下,要禁用对站点的匿名访问,以保护站点不被围授权用户侵入。然后要更新Web.config文件,指定身份验证模式为Windows身份验证,并指定ASP.NET应该使用用户应该被IIS质询时输入的证书作为该应用程序的证书。
-
<configuration> <system.web> <authentication mode="Windows"> </authentication> <identity impersonate="true"/> </system.web> </configuration>
可以通过Web.config文件的<authorization>部分允许或拒绝角色、用户、指定组合访问权限:
-
<configuration> <system.web> <authorization> <allow roles="role1"/> <deny users="*"/> </authorization> </system.web> </configuration>
Windows身份验证时最快的身份验证模式,因为它依赖于IIS已查询过的东西,但是,它也是可自定义程度最小的验证模式,因为不能控制登录页面或证书来源,该模式比较适合内网。
Forms身份验证允许控制标准的登录页面,并根据Web.config文件中的条目进行身份验证,或者使用自己的身份验证文件。Forms身份验证时可以定义最强的身份验证方法。
-
<configuration> <system.web> <authentication mode="Forms"> <forms name="Form1" path="/" loginUrl="Login.aspx" timeout="15"/> </authentication> </system.web> </configuration>
可以在Web.config文件中指定能够访问Web应用程序的证书的一个列表,但这样很不安全,证书是在XML配置文件中以明文存储的。虽然可以加密密码的值,但会造成性能的下降,而且管理证书列表也会非常麻烦。
一般是针对用户的ID和密码所在的数据源创建身份验证方法。通过调用存储过程、或者直接的后台逻辑。
Passport身份验证允许应用程序和Microsoft Passpart服务集成在一起。该模式基本工作方式是:当检测一个为进行身份验证的请求时,ASP.NET把登录证书从一个Passport登录窗口发送到Passp服务。
Passport是最慢的身份验证方式,为了验证证书,它要求通过Internet进行Web服务类型的通信。不过Passport可以很好的利用到单点登录。