当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  基于角色(Role-Based)的表单验证

 基于角色(Role-Based)的表单验证

点击次数:14 次 发布日期:2008-11-26 09:51:15 作者:源代码网
源代码网推荐      要求:
源代码网推荐  using System.Web.Security
源代码网推荐  using System.Security.Principal
源代码网推荐  
源代码网推荐  [Principal]:主要的(这里怎样翻译呢??)
源代码网推荐  ==================================
源代码网推荐  
源代码网推荐  目录
源代码网推荐  
源代码网推荐  
源代码网推荐  +admin1
源代码网推荐   -default.aspx
源代码网推荐   -web.config //web.config#1
源代码网推荐  +admin2
源代码网推荐   -default.aspx
源代码网推荐   -web.config//web.config#2
源代码网推荐  +bin
源代码网推荐  -web.config//web.config#root
源代码网推荐  -login.aspx
源代码网推荐  
源代码网推荐  
源代码网推荐  ==========================
源代码网推荐  目的:
源代码网推荐  admin1文件夹:只有role是administrator可以访问.
源代码网推荐  admini2文件夹:只有role是controler可以访问.
源代码网推荐  
源代码网推荐  帐号,密码,角色存储在特定数据库中.
源代码网推荐  
源代码网推荐  本例目的(其他道理相同):
源代码网推荐  caca是administrator
源代码网推荐  wawa是controler
源代码网推荐  所以caca可以访问admin1,不能访问admin2;wawa反之.
源代码网推荐  
源代码网推荐  ==========================
源代码网推荐  配置:
源代码网推荐  (1)web.config#root
源代码网推荐  
源代码网推荐  
源代码网推荐  <?xml version="1.0" encoding="utf-8"?>
源代码网推荐  <configuration>
源代码网推荐   <system.web>
源代码网推荐   <authentication mode="Forms">
源代码网推荐   <forms name="authenticationcookie"
源代码网推荐  loginUrl="login.aspx" protection="All" path="/" timeout="40"/>
源代码网推荐   </authentication>
源代码网推荐   </system.web>
源代码网推荐  </configuration>
源代码网推荐  
源代码网推荐  (2)web.config#1
源代码网推荐  
源代码网推荐  
源代码网推荐  <?xml version="1.0" encoding="utf-8"?>
源代码网推荐  <configuration>
源代码网推荐   <system.web>
源代码网推荐   <authorization>
源代码网推荐   <allow roles="administrator"/>
源代码网推荐   <deny users="*"/>
源代码网推荐   </authorization>
源代码网推荐   </system.web>
源代码网推荐  </configuration>
源代码网推荐  
源代码网推荐  (3)web.config#2
源代码网推荐  
源代码网推荐  
源代码网推荐  <?xml version="1.0" encoding="utf-8"?>
源代码网推荐  <configuration>
源代码网推荐   <system.web>
源代码网推荐   <authorization>
源代码网推荐   <allow roles="controler"/>
源代码网推荐   <deny users="*"/>
源代码网推荐   </authorization>
源代码网推荐   </system.web>
源代码网推荐  </configuration>
源代码网推荐  
源代码网推荐  ==========================
源代码网推荐  关键代码:
源代码网推荐  (1)login.aspx
源代码网推荐  
源代码网推荐  
源代码网推荐  <script language=c# runat=server>
源代码网推荐  private void signin(Object sender,EventArgs e)
源代码网推荐  {
源代码网推荐   string aRole="guest";
源代码网推荐   if(tbName.Text=="caca")aRole="administrator";
源代码网推荐   if(tbName.Text=="wawa")aRole="controler";
源代码网推荐  
源代码网推荐  
源代码网推荐  //建立role-based认证票据(我认为本质是cookie)
源代码网推荐   FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
源代码网推荐   1, // version(版本?)
源代码网推荐   tbName.Text, // user name(可能是生成票据验证cookie的名称)
源代码网推荐   DateTime.Now, // creation(票据产生时间)
源代码网推荐   DateTime.Now.AddMinutes(40),// Expiration(票据cookie失效时间)
源代码网推荐   false, // Persistent(这个应该是票据的保留时间)
源代码网推荐   aRole ); // User data(角色)
源代码网推荐  //修改票据cookie,使其加密(本质是写入一个与票据cookie同名的新cookie)
源代码网推荐   string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
源代码网推荐   HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName,encryptedTicket);
源代码网推荐  //在保存这个Cookie之前,需要设定它的有效时间
源代码网推荐  //authCookie.Expires=DateTime.Now.AddDays(3);
源代码网推荐   Response.Cookies.Add(authCookie);
源代码网推荐  //返回所请求的URL
源代码网推荐   Response.Redirect( FormsAuthentication.GetRedirectUrl(tbName.Text, false ));
源代码网推荐  
源代码网推荐  
源代码网推荐  }
源代码网推荐  private void signout(Object sender,EventArgs e)
源代码网推荐  {
源代码网推荐  //注销票据
源代码网推荐   FormsAuthentication.SignOut();
源代码网推荐  }
源代码网推荐  </script>
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  <html>
源代码网推荐  <head>
源代码网推荐  <title>LogIn</title>
源代码网推荐  </head>
源代码网推荐  <body>
源代码网推荐  <form runat=server>
源代码网推荐  Name:<asp:textbox runat=server id=tbName/>[caca/wawa]
源代码网推荐  <asp:button runat=server text=LogIn onclick=signin/>
源代码网推荐  <asp:button runat=server text=SignOut onclick=signout/>
源代码网推荐  <hr>
源代码网推荐  <asp:label runat=server id=lblMessage/>
源代码网推荐  </form>
源代码网推荐  </body>
源代码网推荐  </html>
源代码网推荐  
源代码网推荐  (2)Global.asax
源代码网推荐  
源代码网推荐  
源代码网推荐  <% @ import namespace=System.Security.Principal %>
源代码网推荐  <% @ import namespace=System.Security %>
源代码网推荐  <script language=c# runat=server>
源代码网推荐  protected void Application_AuthenticateRequest(Object sender, EventArgs e)
源代码网推荐   {
源代码网推荐  
源代码网推荐  // Extract the forms authentication cookie(还原加密的票据)
源代码网推荐   string cookieName = FormsAuthentication.FormsCookieName;
源代码网推荐   HttpCookie authCookie = Context.Request.Cookies[cookieName];
源代码网推荐   if(null == authCookie)
源代码网推荐   {
源代码网推荐   // There is no authentication cookie.
源代码网推荐   return;
源代码网推荐   }
源代码网推荐   FormsAuthenticationTicket authTicket = null;
源代码网推荐   try
源代码网推荐   {
源代码网推荐   authTicket = FormsAuthentication.Decrypt(authCookie.Value);
源代码网推荐   }
源代码网推荐   catch(Exception ex)
源代码网推荐   {
源代码网推荐   // Log exception details (omitted for simplicity)
源代码网推荐   return;
源代码网推荐   }
源代码网推荐   if (null == authTicket)
源代码网推荐   {
源代码网推荐   // Cookie failed to decrypt.
源代码网推荐   return;
源代码网推荐   }
源代码网推荐   // When the ticket was created, the UserData property was assigned a
源代码网推荐   // pipe delimited string of role names.(票据已经还原,提取票据的UserData即为验证用户的role)
源代码网推荐   string[] roles = authTicket.UserData.Split(new char[]{"|"});
源代码网推荐  
源代码网推荐   // Create an Identity object
源代码网推荐   FormsIdentity id = new FormsIdentity( authTicket );
源代码网推荐   // This principal will flow throughout the request.
源代码网推荐   GenericPrincipal principal = new GenericPrincipal(id, roles);
源代码网推荐   // Attach the new principal object to the current HttpContext object
源代码网推荐   Context.User = principal;
源代码网推荐  
源代码网推荐  }
源代码网推荐  </script>
源代码网推荐  
源代码网推荐  
源代码网推荐  ===========================
源代码网推荐  参考:
源代码网推荐  (1)Building Secure Microsoft ASP.NET Applications:
源代码网推荐  Authentication, Authorization, and Secure Communication by Microsoft Corporation
源代码网推荐  ISBN:0735618909
源代码网推荐  Microsoft Press
源代码网推荐  (2)MSDN
源代码网推荐  
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华