ASP.NET安全机制
请区分 authorization 和
authentication
ASP.NET安全机制主要分两个步骤:身份验证和权限控制。身份验证是对用户进行身份的识别,例如验证用户的用户名和密码,如果验证通过,则由权限控制决定用户是否有权限访问所请求的资源。 这两个步骤在ASP.NET中主要是通过web.config配置文件中的两个配置节来实现的,分别是<authentication >和<authorization>。web.config中的常用配置节已经在上一章中已经介绍了,在本章中主要介绍<authentication >和<authorization>配置节。 ² <authentication >
<authentication >配置节可以配置ASP.NET中的身份验证信息,支持三种类型,分别是Windows身份验证、Forms验证、Passport身份验证,通过mode属性可以设置身份验证的类型。 mode属性的几个可选设置如下: 1. Windows:应用程序将身份验证的工作交给IIS来完成。 2. Forms:由ASP.NET基于窗体进行身份验证。 3. Passport:由Microsoft Passport Network身份验证,是微软的登录通行证。 上述三种身份验证中Forms验证是三种验证方式中最灵活的一种,它可以选择将验证信息存储于Cookies或URL中,伴随着用户请求和页面在Web服务器和浏览器之间传递。也可以将验证信息存储在数据库中。 <authentication>配置节包含一个子配置节<forms>,为基于窗体的自定义身份验证配置ASP.NET应用程序。<forms>配置节的主要属性如下表所示: 表1 <forms>配置节的主要属性 代码演示: <authentication >
- <configuration>
- <system.web>
- <authentication mode="Forms">
- <forms name="myForm" loginUrl="UserLogin.aspx" timeout="10">
- </forms>
- </authentication>
- </system.web>
- </configuration>
复制代码
通过上述配置文件,当用户访问站点时,如果用户没有通过身份验证,将页面重定向到UserLogin.aspx页面。但是将上面代码保存到web.config后,目标页面还是可以不用登录就直接访问,原因是现在只进行了身份验证而没有做权限控制,没有权限就不能够对用户进行验证更没有办法利用cookie进行验证信息的存储,所以现在我们必须对用户进行适当的权限管理了。
² <authorization> <authorization>配置节主要是对应用程序的授权,从而控制用户通过客户端对网站中资源的访问。<authorization>配置节主要包含两个子配置节:allow和deny。 <allow>配置节:添加一个验证规则,该规则允许对资源进行访问。 <deny>配置节:添加一个验证规则,该规则拒绝对资源的访问。 <allow>配置节和<deny>配置节都包含两个属性:users和roles,分别从用户和角色两个方面进行权限验证。 语法结构: <authorization> - <configuration>
- <system.web>
- <authorization>
- <allow users="*"> ①
- <deny users="?"> ②
- </authorization>
- </system.web>
- </configuration>
复制代码语法解析: ① *代表所有用户,验证规则是允许所有用户。 ② ?代码匿名用户,验证规则是拒绝匿名用户。 | allow和deny元素的先后顺序非常重要,系统总是按照从前往后逐条匹配的方式,执行最先的匹配者 |
如果我们要添加一个验证规则,允许所有除匿名用户之外的所有用户访问,可以结合<authentication>配置节在发现用户被拒绝访问之后重定向到指定的URL,参考代码如下。 代码演示: < authorization > - <configuration>
- <system.web>
- <authentication mode="Forms">
- <forms name="myForm" loginUrl="UserLogin.aspx" timeout="10">
- </forms>
- </authentication>
- <authorization>
- <deny users="?">
- <deny roles="Guest">
- <allow users="*">
- </authorization>
- </system.web>
- </configuration>
复制代码 |