在ASP.NET安全术语中,有两个很重要的词语:鉴定和认证。鉴定机制有助于ASP.NET区别各个用户。一旦被执行,鉴定机制就会运行并判断你是否可以允许访问你想要访问的网页。
在三种ASP.NET鉴定类型中,有两种依赖于网页程序之外的技术:
Windows鉴定集成在操作系统(Windows NT/2000/XP)的鉴定机制中;
密码鉴定需要与一个Microsoft 密码服务器联系在一起。
你可以定义第三种类型鉴定机制,即窗体鉴定。窗体鉴定与ASP.NET程序紧密联系在一起。这一篇文章我们主要讲述有关窗体鉴定方面的内容。
简单性
窗体鉴定的一个重要的优点在于它的简单性。由于简单性,窗体鉴定只需要你遵循以下几步:
1. 编辑Web.config <authentication> 和 <authorization>中的内容;
2. 生成一个可供用户访问的标准SAPX网页;
3. 建立一个带有用户名和密码输入框,以及一个提交窗体铵钮的注册网页;
4. 单击窗体中的提交按钮,然后调用鉴定允许和RedirectFromLoginPage方法。
Web.config
Web.config中的<authentication>要素可以允许你在ASP.NET中使用窗体鉴定。其中的一个子要素<forms>允许你指定要注册的网页。在<forms>要素中,你可以有选择地添加一个<credentials>要素,这个要素直接分配用户名和密码,如表A所示。值得一提的是,我现在有必要解释一下窗体鉴定的简单建立用法,这就意味着我要把很多用户名和密码保存在Web.config中,这对于网络来说并不是一件很好的事情。
对于程序中的用户鉴定,你必须采取一定的措施以禁止非法用户的访问。这也就是<authorization>要素指定的功能。你只需在<deny>要素中的用户属性设置为“?,”即可,如表A所示。
现在,如果有人想访问被Web.config管理的ASPX网页,ASP.NET就会执行用户鉴定,并决定是否通过鉴定认可。
一个标准的网页
为了能检测你的鉴定环境是否真正起作用,你应该建立至少一个ASPX网页。表B中的范例建立的网页简单地说明了通过鉴定了的用户名,这就是证明鉴定已经正常的工作。如果要检测,你可以在你的浏览器中直接地访问这个网页。如果你的鉴定系统能够工作,你就能够进入以下要讲述的注册页。
注册(登录)页
最简单的注册页只包含一个用户名文本输入框,一个密码文本输入框,以及一个按钮,如表C所示。你必须在代码中编写按钮触发事件以调用处理鉴定的函数。
表D显示了按钮触发事件的过程。它采用System.Web.Security中的FormsAuthentication类,第一个函数即被调用,然后传递用户名和密码。.NET使用Web.config文件中的元素比较输入的用户名和密码。如果用户名和密码正确,RedirectFromLoginPage函数就会被调用。
RedirectFromLoginPage函数中的参数包含用户名和一个布尔量的值,这个值代表输入用户名对应的密码是否正确。
完成这些步骤之后,如果你想试一试浏览器能否正确访问这些标准网页,你可以直接使用注册页。除非你能正确地通过鉴定,否则你只能永远地停留在注册页。
改进措施
正如我所提过,你最好不要把用户名和密码长久地保存在Web.config文件中。这是因为你不能动态地接受新用户的信息,同时当你想人工地更新Web.config,你的程序会重新启动,这很有可能产生很多异常。
所以,你最好不要使用独立文件或数据库来保存用户名和密码。否则一旦你这样做,你将不能调用FormsAuthentication.Authenticate函数。
你也可以把密码进一步加密以避免一些别有用心的人获取用户名和密码表。FormsAuthentication类中的HashPasswordForStoringInConfigFile函数能达到这一要求。
快捷又安全
使用窗体鉴定,你可以在几分钟之内建立一个简单而又安全的网络程序,你无需在程序的ASPX文件中加入代码。这真是一种很快捷又安全的方法。