Robin's Blog

记录 积累 学习 成长

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
构建基于forms的验证机制过程如下: 
 1,设置IIS为可匿名访问和asp.net web.config中设置为form验证 
 2,检索数据存储验证用户,并检索角色(如果不是基于角色可不用) 
 3,使用FormsAuthenticationTicket创建一个Cookie并回发到客户端,并存储 
  角色到票据中,如: 
  FormsAuthentication.SetAuthCookie(Username,true | false) 
  cookies保存时间: 
  HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Expires=DateTime.Now.AddDays(1)
  
  如果需要存储角色,采用: 
 FormsAuthenticationTicket authTicket = new 
 FormsAuthenticationTicket( 
  1, // 版本号。 
  txtUserName.Text, // 与身份验证票关联的用户名。 
  DateTime.Now, // Cookie 的发出时间。 
  DateTime.Now.AddMinutes(20),// Cookie 的到期日期。 
  false, // 如果 Cookie 是持久的,为 true;否则为 false。 
  roles ); // 将存储在 Cookie 中的用户定义数据。 
  roles是一个角色字符串数组 
  string encryptedTicket = FormsAuthentication.Encrypt(authTicket); //加密 
  
  存入Cookie 
  HttpCookie authCookie = 
  new HttpCookie(FormsAuthentication.FormsCookieName, 
  encryptedTicket); 
  
  Response.Cookies.Add(authCookie); 
  
 4,在Application_AuthenticateRequest事件中处理程序中(Global.asax)中,使用 
  票创建IPrincipal对象并存在HttpContext.User中 
  代码: 
  HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; 
  FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);//解密 
  string[] roles = authTicket.UserData.Split(new char[]{';'});//根据存入时的格式分解,;或|.... 
  Context.User = new GenericPrincipal(Context.User.Identity, Roles);//存到HttpContext.User中 

 判断某个角色验证 
 HttpContext.Current.User.IsInRole(roles) 
 具体实现 
  
 Web.config文件 
 加入节点,name为COOKIE名称,loginUrl为没有通过验证跳转的地址 
 <system.web> 
  <authentication mode="Forms"> 
  <forms name="Hstear" 
 loginUrl="login.aspx" protection="All" path="/" timeout="40"/> 
  </authentication> 
 </system.web> 
 设置目录访问 path为目录名,roles为票据中的角色名 
 发现网上的都说要单独一个WEB.CONFIG文件放在目录中,但实际在根目录中设置即可,单个文件也一样 
 <location path="Admin"> 
  <system.web> 
  <authorization> 
  <allow roles="admin"/> 
  <deny users="*"/> 
  </authorization> 
  </system.web> 
 </location> 
 Global.asax文件 

 Application_AuthenticateRequest事件中加入

Code

原理,将用户角色信息保存在票据中,通过Global.asax,WEB.CONFIG中的设置,判断角色的权限 

posted on 2009-02-16 17:29  Robin99  阅读(264)  评论(1)    收藏  举报