在系统开发中经常会有一种场景是对整个网站而言有部分页面是可以通过匿名访问即可无需认证,而有些网页是需要通过认证(简单的讲就是需要登陆)来处理。如果我们简单的只是增加一个登陆界面,后期在访问每个页面时都增加一个对cookie的检查是否是已授权用户,此方法漏洞比较多,而且处理起来也很麻烦。好在现在asp.net中增加了对页面安全认证的处理,使得我们在开发时节省了大量时间。
为此,我们需要做的步骤可以如下:
1、修改web.config,配置认证方式:系统提供的认证方式有Windows、Forms、PassPort、None,默认情况下站点的认证模式是<authentication mode="Windows">,也就是使用IIS验证方式,显然这种认证方式不是我们这个场景所需要的。我们需要的采用Forms的认证模式,简单的说就是页面认证,其原理后面在说,先看如何配置:
1/<authentication mode="Windows|Forms|Passport|None"> 2 <forms name="name" 3 loginUrl="url" defaultUrl="url" 4 protection="All|None|Encryption|Validation" 5 timeout="30" path="/" > 6 requireSSL="true|false" 7 slidingExpiration="true|false"> 8 <credentials passwordFormat="Clear|SHA1|MD5"> 9 <user name="username" password="password"/> 10 </credentials> 11 </forms> 12 <passport redirectUrl="internal"/> 13 </authentication> 一、authentication属性
属性 | 选项 | 说明 |
mode | 控制应用程序的默认身份验证模式。 | |
Windows | 将 Windows 验证指定为默认的身份验证模式。当使用以下任意形式的 Microsoft Internet 信息服务 (IIS) 身份验证时使用该模式:基本、简要、集成的 Windows 验证 (NTLM/Kerberos) 或证书。 | |
Forms | 将 ASP.NET 基于窗体的身份验证指定为默认的身份验证模式。 | |
Passport | 将 Microsoft Passport 身份验证指定为默认的身份验证模式。 | |
None | 不指定任何身份验证。只有匿名用户是预期的或者应用程序可以处理事件以提供其自身的身份验证。 |
属性 | 选项 | 说明 |
name | 指定要用于身份验证的 HTTP Cookie。默认情况下,name 的值是 .ASPXAUTH。如果在单个服务器上正运行多个应用程序并且每一应用程序均要求唯一的 Cookie,则您必须在每一应用程序的 Web.config 文件中配置 Cookie 名称。 | |
loginUrl | 指定如果没有找到任何有效的身份验证 Cookie,为登录将请求重定向到的 URL。默认值为 default.aspx。 | |
protection | 指定 Cookie 使用的加密类型(如果有)。 | |
All | 指定应用程序同时使用数据验证和加密来保护 Cookie。该选项使用已配置的数据验证算法(基于 <machineKey> 元素)。如果三重 DES (3DES) 可用并且密钥足够长(48 位或更多),则使用三重 DES 进行加密。All 是默认(和建议)值。 | |
None | 指定对于将 Cookie 仅用于个性化并且具有较低的安全要求的站点而言,同时禁用加密和验证。不推荐以此方式使用 Cookie;但是,这是使用 .NET Framework 启用个性化的占用资源最少的方式。 | |
Encryption | 指定使用三重 DES 或 DES 对 Cookie 进行加密,但不对该 Cookie 执行数据验证。以此方式使用的 Cookie 可能会受到精选的纯文本的攻击。 | |
Validation | 指定验证方案验证已加密的 Cookie 的内容在转换中是否未被改变。Cookie 是使用 Cookie 验证创建的,方式是:将验证密钥和 Cookie 数据相连接,然后计算消息身份验证代码 (MAC),最后将 MAC 追加到输出 Cookie。 | |
timeout | 指定以整数分钟为单位的时间量,超过此时间量,Cookie 将过期。默认值是 30。如果 SlidingExpiration 属性为 true,则 timeout 属性是一个弹性值,以收到最后一个请求后指定的分钟数为到期时间。为避免危及性能,以及为避免向启用 Cookie 警告的用户显示多个浏览器警告,在经过了超过一半的指定时间后更新该 Cookie。这可能导致精确性上的损失。持久性 Cookie 不超时。 | |
path | 为由应用程序发出的 Cookie 指定路径。默认值是正斜杠 (/),这是因为大多数浏览器是区分大小写的,并且如果路径大小写不匹配,将不发送回 Cookie。 | |
requireSSL | 指定是否需要安全连接来转换身份验证 Cookie。 | |
true | 指定必须使用安全连接来保护用户凭据。如果是 true, ASP.NET 为身份验证 Cookie 设置 HttpCookie.Secure ,兼容的浏览器不返回 Cookie,并且除非连接使用的是安全套接字层 (SSL)。 | |
false | 指定在传输 Cookie 时,安全连接不是必需的。默认值为 false。 | |
slidingExpiration | 指定是否启用弹性过期时间。在单个会话期间,弹性过期时间针对每个请求重置当前身份验证 Cookie 的过期时间。 | |
true | 指定启用弹性过期时间。在单个会话期间,身份验证 Cookie 被刷新,并且每个后续请求的到期时间被重置。ASP.NET 版本 1.0 的默认值为 true。 | |
false | 指定不启用弹性过期时间,并指定 Cookie 在最初发出之后,经过一段设定的时间间隔后失效。默认值为 false。 |
三、credentials属性
属性 | 选项 | 说明 |
passwordFormat | 指定用于存储密码的加密格式。 | |
Clear | 指定密码不加密。 | |
MD5 | 指定使用 MD5 哈希算法给密码加密。 | |
SHA1 | 指定使用 SHA1 哈希算法给密码加密。 |
四、user属性
属性 | 说明 |
name | 登录用户名。 |
password | 用户的密码。 |
属性 | 说明 |
redirectUrl | 请求被重定向到的 URL。 |
通过以上说明应该基本明白该如何配置了,我们常用的配置是
<authentication mode="Windows"> <forms name=".FrameWork" defaultUrl="Default.aspx" loginUrl="Login.aspx" enableCrossAppRedirects="true" path="/"></forms> </authentication>
需要重点说明的是 name是要在整个应用服务器是唯一的,它是存储cookie的标识,loginurl 是如果访问的页面没有获得认证信息则返回到该指定的页面进行认证,defaulturl 是通过认证后的默认的访问页面。
2、下面需要的是配置页面访问的用户
<authorization> <allow .../> <deny .../> </authorization>
下面几部分描述了属性、子元素和父元素。
属性
无。
子元素
子标记 说明 allow
向授权规则映射添加一个规则,该规则允许对资源进行访问。
deny
向授权规则映射添加一条拒绝对资源的访问的授权规则。
运行时,授权模块从最本地的配置文件开始,循环访问 allow 和 deny 元素,直到它找到适合特定用户帐户的第一个访问规则。然后,该授权模块根据找到的第一个访问规则是 allow 还是 deny 规则来允许或拒绝对 URL 资源的访问。默认的授权规则为 <allow users="*"/>。因此,默认情况下允许访问,除非另外配置。
<deny users="?"/> 作为users需要说明的是可以采用一个逗号分隔的用户名列表,问号 (?) 表示拒绝匿名用户;星号 (*) 表示拒绝所有用户帐户访问。
3、配置需要排除认证的页面
下面的代码示例演示如何允许匿名用户获得 Logon.aspx 页的访问权
<configuration> <location path="Logon.aspx"> <system.web> <authorization> <allow users="?"/> </authorization> </system.web> </location> </configuration>
好了,到此我们就可以初步设计一个安全认证的配置了,可以试试哦,感觉要简单多了!
后面我们还要在了解些高级安全认证的知识,同样也会涉及到配置web.config,可以利用配置web.config
利用配置访问节,指定我们的安全认证模块,自定义认证模式!