快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
没有创建Web应用程序,那就现在创建一个。当然你也可以在一个已有的Web应用程序中创建这个页面。这里我假设已经创建了一个名称为 RolebasedAuth的Web应用程序(即 Visual Studio .Net 中的Project)。我把这个Login.aspx放在它的根目录下,也就是通过 http://localhost/RolebasedAuth/Login.aspx 可以访问。

这个Login.aspx放在哪里是无所谓的,但是它必须是公众有权限访问的。

在应用程序根路径下,我们创建两个机密的子目录,分别是 Admin 和 User。

接下来,我们创建一个支持角色认证的窗体认证登录系统。因为微软没有提供简单的实现机制,我们要自己花些时间去创建认证票据。它需要存贮少量信息,当然,有些名称必须和 Web.config 中配置的一样,要不ASP.NET 就会认为你的认证票据是无效的,从而强制转向到登录页面。我们在 VS.NET 中为 Login.aspx 添加两个TextBox控件,取名 UserNameTextBox, PasswordTextBox,再添加一个Button,取名 LoginButton,点击它进入后台代码。在 LoginButton_Click 方法中添加需要的代码。如下:

程序代码

private void LoginButton_Click(object sender, System.EventArgs e)
     {
       // 初始化 FormsAuthentication
       // 注意它是在 System.Web.Security 命名空间
       // 因此要在代码开始添加 using System.Web.Security;
       FormsAuthentication.Initialize ();
      // 创建数据库连接和数据库操作命令对象
       // 注意它是在 System.Data.SqlClient 命名空间
       // 因此要在代码开始处添加 using System.Data.SqlClient;
       SqlConnection conn =
         new SqlConnection("Data Source=sun-willmove;integrated security=SSPI;Initial Catalog=WebSolution;");
       SqlCommand cmd = conn.CreateCommand();
       cmd.CommandText = "Select UserRoles FROM Users Where UserName=@username " +
         "AND Password=@password";
       // 填充各个参数
       cmd.Parameters.Add("@username", SqlDbType.NVarChar, 100).Value =
         UserNameTextBox.Text;
       cmd.Parameters.Add("@password", SqlDbType.NVarChar, 150).Value =
         FormsAuthentication.HashPasswordForStoringInConfigFile(
         PasswordTextBox.Text, "md5"); // 或者 "sha1"
       // 执行数据库操作命令
       conn.Open();
       SqlDataReader reader = cmd.ExecuteReader();
       if (reader.Read())
       {
         // 为了实现认证,创建一个新的票据
         FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
           1, // 票据版本号
           UserNameTextBox.Text, // 票据持有者
           DateTime.Now, //分配票据的时间
           DateTime.Now.AddMinutes(30), // 失效时间
           true, // 需要用户的 cookie
           reader.GetString(0), // 用户数据,这里其实就是用户的角色
           FormsAuthentication.FormsCookiePath);//cookie有效路径
//使用机器码machine key加密cookie,为了安全传送
         string hash = FormsAuthentication.Encrypt(ticket);
         HttpCookie cookie = new HttpCookie(
         

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号