Web安全处理的第一步便是身份验证,即对于发送请求信息的用户验证其身份。用户使用其证件来表明身份,证件的种类很多,最常用的是用户名和密码,验证能够辨别用户身份是否真空,如果证件有效,则用户将被允许进入系统,并被赋予一个合法的已知身份(Identity)。
ASP.NET验证是通过验证提供程序(Authentication Provider)来实现的,此提供程序是通过Web.config配置文件使用<authentication>进行控制的,其基本的使用语法如下:
折叠展开XML/HTML 代码复制内容到剪贴板ASP.NET提供了3种验证用户的模式,每一种验证模式都是通过一个独立的验证提供程序来实现的。这3种验证模式分别为Windows、Forms和Passport。Windows验证通过IIS实现:Forms验证是在开发人员自己的服务器上实现;而Passpart验证则是通过微软公司的订阅服务实现。下面将分别进行介绍。
一、基于Windows的身份验证模式
在Windows身份验证模式下,ASP.NET依靠IIS对用户进行身份验证,并创建Windows访问令牌来表示经过身份验证的标识。IIS提供下列3种身份验证策略对它接收的每个请求进行身份验证:
1.基本身份验证
基本身份验证要求用户以用户名和密码的形式提供证书以证明其标识。它是基于RFC 2617提出的Internet标准。Netscape Navigator和Microsoft Internet Explorer都支持基本身份验证。用户证书以不加密的Base64编码格式从浏览器传送到Web服务器。由于Web服务器得到的用户证书是不加密格式,因此Web服务器可以使用用户证书发出远程调用。
网页注意:基本身份验证只应与安全信道(通常是使用SSL建立的)一起使用。否则,用户名和密码很容易被网络监视软件窃取。如采使用基本身份验证,应在所有页(而不仅仅是登录页)上使用SSL(安全套接字层),因为在发出所有后续请求时都传递证书。
基本身份验证的流程如下:
(1)客户向服务器请求被限制的资源。
(2)Web服务器以“401 Unauthoried”进行响应。
(3)客户端浏览器接收到这条信息后,要求用户输入证件,通常是用户名和密码。
(4)然后,Web服务器使用这些用户证件来访问服务器上的资源。
(5)如果验证失败,用户证件无效,则会返回步骤(2),重新以“401 Unauthoried”响应。
(6)如果验证成功,则客户浏览器便通过身份验证,可以访问资源。
使用基本身份验证方法来确保某些资源的安全,可以按照下列步骤来操作:
(1)首先,从“控制面板”窗口中打开“管理工具”窗口,然后选择“Internet信息服务”选项。在打开的窗口中,展开结点。在“默认网站”节点下,选择一个要确保其安全的目录,用鼠标右键单击该目录(该目录为“默认网站”节点下的虚拟目录),从弹出的快捷菜单中选择“属性”命令.如图1所示。
(2)在打开的对话框中,选择“目录安全性”选项卡。单击“身份验证和访问控制”区域中的“编辑”按钮。
(3)在打开的如图2所示的“身份验证方法”对话框中,取消“启用匿名访问”复选框的选中状态,用户必须通过验证才能访问该目录,然后选中“基本身份验证”复选框。
(4)单击“确定”按钮,结束身份验证的设置,然后打开浏览器窗口,在地址栏中输入URL用以访问刚刚设置安全性的资源,弹出对话框,要求用户输入证件信息。
(5)输入Windows操作系统某个用户账户对应的证件,例如登录计算机时使用的用户名和密码。IIS将这些证件数据信息与Windows操作系统的用户列表进行比较,从而决定批准或者拒绝该请求。如果验证成功,则将批准用户对资源的请求,网页会正常显示:如果验证失败,则对话框会不断弹出,要求用户输入正确的证件信息。
2.摘要式身份验证
与IIS 5.0一起推出的摘要式身份验证与基本身份验证类似,但它从浏览器向Web服务器传送用户证书时采用MD5哈希算法加密,因此更为安全,不过它要求使用Internet Explorer 5.0或更高版本的客户端以及特定的服务器配置。
摘要式身份验证的流程如下:
(1)用户向服务器请求被限制的资源。
(2)Web服务器将发送一个验证请求,它使用“401 Unauthoried”进行响应。
(3)客户端浏览器在接收到该响应后,弹出对话框来询问用户的证件资料。当用户输入证件资料后,浏览器会在提供的数据中加入一些唯一性的信息并对其进行加密。这些唯一性的数据确保以后任何人都无法通过复制这些加密后的信息来访问服务器。
(4)客户端浏览器将加密后的证件以及未经加密的唯一性信息发送给服务器。
(5)Web服务器使用未经加密的唯一性信息来对Windaws操作系统的用户列表中的用户证件进行加密。然后逐一比较加密后的证件与浏览器发送来的数据。
(6)如果证件无效(即加密后的证件与浏览器发送来的数据无一相同),则回到步骤(2)继续请求用户证件资料。
(7)如果证件通过了身份验证,浏览器可以访问请求的资源。
要启用摘要式身份验证,可以在图2所示的“身份验证方法”对话框中选中“Windows域服务器的摘要式身份验证”复选框。如果服务器没有连接到某个域中,则该复选框不可用。
网页注意:使用摘要式验证时,在“身份验证方法”时话框中要同时确保“启用匿名访问”复选框没有被选中。
3.集成的Windows身份验证
集成Windows身份验证时,不要求用户输入证件。相反,当浏览器连接到服务器后,即将加密后的、用户登录计算机时使用的用户名和密码信息发送给服务器。服务器将对这些信息进行检查,以确定用户是否有权访问。这一切验证过程对用户都是不可见的。
要启用集成的Windows身份验证,也可以在图2所示的“身份验证方法”对话框中选中“集成Windows身份验证”复选框。
网页注意:只有当服务器和客户端机器都使用Windows操作系统时,集成Windows身份验证才有效。如果选择了多种验证方法,则最严格的方法优先,例如,Windows验证方法将覆盖匿名访问。
二、基础窗体的身份验证模式
在ASP.NET中,可以选择由ASP.NET应用程序通过窗体验证(Form authentication)进行身份验证,而不是通过IIS。窗体验证是ASP.NET验证服务,它能够让应用程序拥有自己的登录界面,当用户试图访问被限制的资源时便会重定向到该登录界面,而不是弹出登录对话框。在登录页面中,可以自行编写代码来验证用户的证件资料。
1.安全处理流程
如果在ASP.NET中采用窗体验证模式,则其安全处理流程如图4所示。
安全处理流程的说明如下:
(1)客户端向站点请求被保护的页面。
(2)服务器接受请求,如果请求没有包含有效的验证Cookie,Web服务器把用户重定向到Web.Config文件中authentication元素的loginURL属性中指定的URL,该URL包含一个供用户登录的页面。
(3)用户在登录界面中输入用户证件资料,并且提交窗体。如果证件有效,则ASP.NET将在客户端创建一个验证Cookie。验证Cookie被设置后,以后的请求都将自动验证,直到用户关闭浏览器为止,也可以将Cookie设置为永不过期,这样用户将总是能通过验证。
(4)通过验证后,检查用户是否有访问所请求的赍源的权限,如果允许访问,则将该用户重新定向至所请求的网页。
2.验证用户证件资料
在登录界面中提交按钮的Click事件处理程序中,可以进行用户输入的证件资料检查,从而判断证书资料是否正确,也就是身份验证的过程。根据正确证件资料的存放位置的不同,可以将验证方式划分为以下3种,即在代码中直接验证、利用数据库实现验证和利用配置文件实现验证。
例1 通过程序代码直接验证用户身份。(实例位置:网页ASP.NET 3.5教程案例资源\19\ch01)
开发人员可以将正确的用户证件资料直接写入代码中,然后与用户输入的证件资料一一对比,从而判断用户证件资料是否正确。
开发人员可以将正确的用户证件资料直接写入代码中,然后与用户输入的证件资料一一对比,从而判断用户证件资料是否正确。
执行程序并输入用户名和密码,当单击“登录”按钮时,首先判断用户输入的信息是否与代码中的资料相符,如果相符,则跳转到另一页,显示“登录成功”;否则,将会弹出消息对话框,提示用户重新输入,显示“您的输入有误,请核对后重新登录”。
下面具体介绍程序实现过程及代码。
(1)打开网站的Web.config文件,并将其配置成使用基本窗体身份验证。
首先,将<authentication>节设置为Forms模式,并在<authentication>节下的<forms>节中,配置要使用的Coo