云自无心水自闲

天平山上白云泉,云自无心水自闲。何必奔冲山下去,更添波浪向人间!
posts - 288, comments - 524, trackbacks - 0, articles - 6
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

表单认证是Asp.net中最Cool的功能之一,一般来说应用都会要求输入认证信息(典型的是用户名和密码)。
在Web.config的设置项中,可以指定登录页面和哪些资源需要保护。当用户第一次访问被保存的资源时,应用会自动定向到指定的登录页面。
如果成功登录,ASP.NET会转到用户初始请求的页面。
以往的应用需要在每个页面的顶部判断用户是否成功登录,手工定向到登录页面,而现在这个工作由表单认证简单地完成了。

举个简单的例子来说明开发过程:
一个应用中有两个页面PublicPage.aspx是向公众开放的,PrivatePage.aspx只允许登录用户才能访问。
第3个页面是登录页面,要求输入用户名和密码。
步骤如下:
1、把PublicPage.aspx, login.aspx, web.config拷贝到一个IIS的虚拟目录下。
2、创建一个子目录Secret,将PrivatePage.aspx, web.config拷贝到子目录中。
3、在web.config中添加以下代码, 实现访问保存页面自动跳转登录页面的功能
<authentication mode="Forms">
  <forms loginUrl="LoginPage.aspx">
    ....
  </forms>
</authentication>
4、另外有一个<credentials>小节列出合法用户和密码
<credentials passwordFormat="Clear">
  <user name="Jeff" password="imbatman" />
  <user name="John" password="redrover" />
  <user name="Bob" password="mxyzptlk" />
  <user name="Alice" password="nomalice" />
  <user name="Mary" password="contrary" />
</credentials>
  此例子中关掉了的加密选项,缺省是开的。
 
5、在Secret子目录的web.config中添加以下代码,实现保护功能。
  <authorization>
   <deny users="?" />
  </authorization>
这是用于通知权限管理模块System.Web.Security.UrlAuthorizationModule阻止未登录用户的访问。"?"代表匿名用户,也可以说是未登录用户。
实际的权限验证是由Login.aspx完成的。下列语句
 if(FormsAuthentication.Authenticate(UserName.Text,Password.Text))
把用户名和密码传给System.Web.Security.FormsAuthentication,如果验证成功,返回True。并且执行页面跳转语句
FormsAuthentication.RedirectFromLoginPage(UserName.Text,false);

6、真实环境的表单认证比上面的例子要复杂的多,真实应用不大可能把用户和密码保存在文本文件中,比较常见的是存放在数据库中。
假定用户表Users有3个字段UserName, password, Role.
对于这种情况,我们需要在刚才的基础上进行2个地方的修改:Login.aspx、web.config(根目录下的)
在web.config中不再需要<credentials>小节了。
login.aspx也不再使用 FormsAuthentication.Authenticate 来验证密码,而使用CustomAuthenticate替代。
在这个方法中使用Sql查询语句来判断用户是否合法。

 

 




只有注册用户登录后才能发表评论。


网站导航: