FormsAuthenticationTicket基于forms的验证
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                FormsAuthenticationTicket基于forms的验证
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                
                            
                            
                            構(gòu)建基于forms的驗(yàn)證機(jī)制過程如下: 
1,設(shè)置IIS為可匿名訪問和asp.net web.config中設(shè)置為form驗(yàn)證
2,檢索數(shù)據(jù)存儲(chǔ)驗(yàn)證用戶,并檢索角色(如果不是基于角色可不用)
3,使用FormsAuthenticationTicket創(chuàng)建一個(gè)Cookie并回發(fā)到客戶端,并存儲(chǔ)
角色到票據(jù)中,如:
FormsAuthentication.SetAuthCookie(Username,true | false)
cookies保存時(shí)間:
HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Expires=DateTime.Now.AddDays(1)
  
如果需要存儲(chǔ)角色,采用:
FormsAuthenticationTicket authTicket = new
FormsAuthenticationTicket(
1, // 版本號。
txtUserName.Text, // 與身份驗(yàn)證票關(guān)聯(lián)的用戶名。
DateTime.Now, // Cookie 的發(fā)出時(shí)間。
DateTime.Now.AddMinutes(20),// Cookie 的到期日期。
false, // 如果 Cookie 是持久的,為 true;否則為 false。
roles ); // 將存儲(chǔ)在 Cookie 中的用戶定義數(shù)據(jù)。
roles是一個(gè)角色字符串?dāng)?shù)組
string encryptedTicket = FormsAuthentication.Encrypt(authTicket); //加密
  
存入Cookie
HttpCookie authCookie =
new HttpCookie(FormsAuthentication.FormsCookieName,
encryptedTicket);
  
Response.Cookies.Add(authCookie);
  
4,在Application_AuthenticateRequest事件中處理程序中(Global.asax)中,使用
票創(chuàng)建IPrincipal對象并存在HttpContext.User中
代碼:
HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);//解密
string[] roles = authTicket.UserData.Split(new char[]{';'});//根據(jù)存入時(shí)的格式分解,;或|....
Context.User = new GenericPrincipal(Context.User.Identity, Roles);//存到HttpContext.User中
  
判斷某個(gè)角色驗(yàn)證
HttpContext.Current.User.IsInRole(roles)
具體實(shí)現(xiàn)
  
Web.config文件
加入節(jié)點(diǎn),name為COOKIE名稱,loginUrl為沒有通過驗(yàn)證跳轉(zhuǎn)的地址
<system.web>
<authentication mode="Forms">
<forms name="Hstear"
loginUrl="login.aspx" protection="All" path="/" timeout="40"/>
</authentication>
</system.web>
設(shè)置目錄訪問 path為目錄名,roles為票據(jù)中的角色名
發(fā)現(xiàn)網(wǎng)上的都說要單獨(dú)一個(gè)WEB.CONFIG文件放在目錄中,但實(shí)際在根目錄中設(shè)置即可,單個(gè)文件也一樣
<location path="Admin">
<system.web>
<authorization>
<allow roles="admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
Global.asax文件
Application_AuthenticateRequest事件中加入
protected void Application_AuthenticateRequest(Object sender, EventArgs e) { string cookieName = FormsAuthentication.FormsCookieName; HttpCookie authCookie = Context.Request.Cookies[cookieName]; FormsAuthenticationTicket authTicket = null; try { authTicket = FormsAuthentication.Decrypt(authCookie.Value); } catch(Exception ex) { return; } string[] roles = authTicket.UserData.Split(new char[]{','});//如果存取多個(gè)角色,我們把它分解 FormsIdentity id = new FormsIdentity( authTicket ); GenericPrincipal principal = new GenericPrincipal(id, roles); Context.User =principal;//存到HttpContext.User中 }
原理,將用戶角色信息保存在票據(jù)中,通過Global.asax,WEB.CONFIG中的設(shè)置,判斷角色的權(quán)限
 
                        
                        
                        1,設(shè)置IIS為可匿名訪問和asp.net web.config中設(shè)置為form驗(yàn)證
2,檢索數(shù)據(jù)存儲(chǔ)驗(yàn)證用戶,并檢索角色(如果不是基于角色可不用)
3,使用FormsAuthenticationTicket創(chuàng)建一個(gè)Cookie并回發(fā)到客戶端,并存儲(chǔ)
角色到票據(jù)中,如:
FormsAuthentication.SetAuthCookie(Username,true | false)
cookies保存時(shí)間:
HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Expires=DateTime.Now.AddDays(1)
如果需要存儲(chǔ)角色,采用:
FormsAuthenticationTicket authTicket = new
FormsAuthenticationTicket(
1, // 版本號。
txtUserName.Text, // 與身份驗(yàn)證票關(guān)聯(lián)的用戶名。
DateTime.Now, // Cookie 的發(fā)出時(shí)間。
DateTime.Now.AddMinutes(20),// Cookie 的到期日期。
false, // 如果 Cookie 是持久的,為 true;否則為 false。
roles ); // 將存儲(chǔ)在 Cookie 中的用戶定義數(shù)據(jù)。
roles是一個(gè)角色字符串?dāng)?shù)組
string encryptedTicket = FormsAuthentication.Encrypt(authTicket); //加密
存入Cookie
HttpCookie authCookie =
new HttpCookie(FormsAuthentication.FormsCookieName,
encryptedTicket);
Response.Cookies.Add(authCookie);
4,在Application_AuthenticateRequest事件中處理程序中(Global.asax)中,使用
票創(chuàng)建IPrincipal對象并存在HttpContext.User中
代碼:
HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);//解密
string[] roles = authTicket.UserData.Split(new char[]{';'});//根據(jù)存入時(shí)的格式分解,;或|....
Context.User = new GenericPrincipal(Context.User.Identity, Roles);//存到HttpContext.User中
判斷某個(gè)角色驗(yàn)證
HttpContext.Current.User.IsInRole(roles)
具體實(shí)現(xiàn)
Web.config文件
加入節(jié)點(diǎn),name為COOKIE名稱,loginUrl為沒有通過驗(yàn)證跳轉(zhuǎn)的地址
<system.web>
<authentication mode="Forms">
<forms name="Hstear"
loginUrl="login.aspx" protection="All" path="/" timeout="40"/>
</authentication>
</system.web>
設(shè)置目錄訪問 path為目錄名,roles為票據(jù)中的角色名
發(fā)現(xiàn)網(wǎng)上的都說要單獨(dú)一個(gè)WEB.CONFIG文件放在目錄中,但實(shí)際在根目錄中設(shè)置即可,單個(gè)文件也一樣
<location path="Admin">
<system.web>
<authorization>
<allow roles="admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
Global.asax文件
Application_AuthenticateRequest事件中加入
protected void Application_AuthenticateRequest(Object sender, EventArgs e) { string cookieName = FormsAuthentication.FormsCookieName; HttpCookie authCookie = Context.Request.Cookies[cookieName]; FormsAuthenticationTicket authTicket = null; try { authTicket = FormsAuthentication.Decrypt(authCookie.Value); } catch(Exception ex) { return; } string[] roles = authTicket.UserData.Split(new char[]{','});//如果存取多個(gè)角色,我們把它分解 FormsIdentity id = new FormsIdentity( authTicket ); GenericPrincipal principal = new GenericPrincipal(id, roles); Context.User =principal;//存到HttpContext.User中 }
原理,將用戶角色信息保存在票據(jù)中,通過Global.asax,WEB.CONFIG中的設(shè)置,判斷角色的權(quán)限
轉(zhuǎn)載于:https://www.cnblogs.com/mybluesky99/archive/2011/06/14/2080493.html
總結(jié)
以上是生活随笔為你收集整理的FormsAuthenticationTicket基于forms的验证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: asp.net 导出Excel 设置格式
 - 下一篇: pku 2418 Hardwood Sp