快速业务通道

ASP.NET基于角色的窗体安全认证机制

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
用中,你可能想为用户找回忘记的密码。但是哈希散列是不可逆的,所以你就不可能恢复原来的密码。但是你可以更改用户的密码,并且把这个更改后的密码告诉他。如果一个网站能够给你旧密码,那么你要考虑清楚了,你的用户数据是不安全的!事实上,国内大部分网站都是没有经过加密直接把用户的密码存储到数据库中的。如何一个黑客入侵成功,那么这些用户帐户就很危险了!

如果没有使用SSL,你的密码在网络中也是以明文传输的。传输过程中可能会被窃取。在服务器端加密密码只能保证密码存储的安全。SSL相关的资料可以在 http://www.versign.com 或 http://www.thewte.com 中找到。

如果你不想以加密方式在数据库中存储密码,你可以更改上面的代码,把

FormsAuthentication.HashPasswordForStoringInConfigFile(PasswordTextBox.Text, "md5") 改成 PasswordTextBox.Text 即可。

下一步,我们需要修改 Global.asax 文件。如果你的Web应用程序没有这个文件,请右键单击Web应用项目,选择 "添加->添加新项...->Global Application Class"。在 Global.asax 或者 Global.asax.cs 中,找到叫做 Application_AuthenticationRequest 的方法(函数)。先要确认已经包含或者使用了 System.Security.Principal 以及 System.Web.Security 命名空间,然后修改它,修改后的代码:

程序代码

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
   if (HttpContext.Current.User != null)
   {
     if (HttpContext.Current.User.Identity.IsAuthenticated)
     {
       if (HttpContext.Current.User.Identity is FormsIdentity)
       {
         FormsIdentity id =
           (FormsIdentity)HttpContext.Current.User.Identity;
           FormsAuthenticationTicket ticket = id.Ticket;

// 取存储在票据中的用户数据,在这里其实就是用户的角色
         string userData = ticket.UserData;
         string[] roles = userData.Split('','');
         HttpContext.Current.User = new GenericPrincipal(id, roles);
       }
     }
   }
}

认证票据(用户名和密码)是没有作为cookie的一部分来存储的,而且也不可以,因为用户可以修改他们的cookie。

事实上,FormsAuthentication是用你的机器码 (machine key,通常在 machine.config 中)来加密票据(FormsAuthenticationTicket)的。我们使用 UserData 存储用户角色,并且生成一个新的凭证。一旦凭证已经创建,它会被添加到当前上下文中(即 HttpContext),这样就可以用它来取回用户角色了。

接下来,我们设置机密目录(也就是"安全目录",特定的使用者如管理员才有权限访问的目录)。首先看看你的Web应用程序根目录下是否有 Web.config 这个文件,如果没有就创建一个。你也可以在你的子目录中创建 Web.config 文件,当然,这个 Web.config 文件是有限制的(一些参数它不可以设置)。要实现安全认证,在 Web应用程序根目录下的 Web.config 文件中找到 <system.web> 节点下的

程序代码

<authentication mode="Windows" />,把它修改为

<authentication mode="Forms">
<forms name="AMUHOUSE.ASPXAUTH"
loginUrl="Login.aspx"
protection="All"
path="./" />
</authentication>
<authorization>
<allow users="*"/>
</authorization>

上面的 name="AMUHOUSE.ASPXAUTH" 中,AMUHO

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号