ASp.net中Froms验证方式
生活随笔
收集整理的這篇文章主要介紹了
ASp.net中Froms验证方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
微軟的ASP.NET提供了3種用戶驗證方式,即Windows驗證、窗體(Forms)驗證和護照驗證(Passport)驗證。 由于驗證方式各不相同,因而這3種驗證方式在使用范圍上也有很大的不同, Windows驗證方式只適用于放在受控環境里的網站; 也就是說,更適合于企業內網(Intranet)。窗體認證特別適合布置于互聯網的應用,而護照驗證方式適合于跨站之間的應用,用戶只用一個用戶名和密碼就可以訪問任何成員站,并且在注銷離開時,所有護照信息都會清除,你可以在公共場所放心的使用。 我們在編寫Web程序時,最多用到的便是窗體(Forms)驗證方式,而微軟提供了只要簡單的配置Web.config文件就可實現這種簡單的窗體(Forms)驗證。為了能更好的使用窗體驗證,我對這種驗證方式進行了研究。 基于表單身份驗證的類的命名空間:System.Web.Security 常用的幾個類分別為: 1.FormsAuthentication? 作用:為 Web 應用程序管理 Forms 身份驗證服務 2.FormsAuthenticationTicket 作用:提供對票證的屬性和值的訪問,這些票證用于 Forms 身份驗證對用戶進行標識 3.FormsIdentity 作用:表示一個使用 Forms 身份驗證進行了身份驗證的用戶標識.(用戶身份) 4.FormsAuthenticationModule 作用:啟用 Forms 身份驗證的情況下設置 ASP.NET 應用程序用戶的標識 一、實現簡單的驗證方式 首先,我們可以通過配置Web.Config文件來實現簡單的驗證方式。先建立一個Web工程,然后在首頁放登錄控件。然后在這個工程下再建立一個目錄,在這個目錄下添加兩個Web頁面,設置成這個目錄下的頁面只有通過驗證后再能訪問。 在Default.aspx頁中,輸入用戶名和密碼,然后Click,如果密碼和用戶名正確,則通過驗證就能轉到新建目錄下的一個頁面上。如果沒有通過驗證,則不能訪問目錄下的頁面。代碼如下: Void?Logon_Click(object?sender,?EventArgs?e)
{
???String?UserName?=?UserEmail.Text;
???String?UserPass?=?UserPass.Text;
???If(通過連接數據庫判斷用戶和密碼是否正確)
??{
//將經過身份驗證的用戶重定向回最初請求的?URL?或默認?URL
????FormsAuthentication.RedirectFromLoginPage(UserName,?Persist.Checkd);
?//這個函數是否建立Cookie:解決:建立Cookie
??Else
??{
???Msg.Text?=?Invalid?credentials.?Please?try?again.";
??}
} 然后在建立的目錄下,新建一個Web.Config文件 <configuration>?? <system.web>???? ????<authorization>?????? <deny?users="?"?/> 不充許沒經過身份驗證的用戶進行訪問???? ?????</authorization>?? </system.web>??????????????</configuration> 在這個Web.Config文件中,設置了這個目錄下所有文件的授權方式。這是一種URL授權。應用程序根據配置對匿名用戶進行檢查。URL授權在Web.config中的<authorization>區段內定義。 <authorization></authorization>區段中有兩個標記,標記<allow>定義了許的用戶、任務和操作,在<deny>標記中包含了不被充許的用戶、任務和操作。 例如: <allow users = “*”> <deny users = “?”>
??? “*”代表所有的用戶,“?”表示匿名(沒經過身份驗證的)用戶。 在要目下的Web.Config中,我們同時要設置驗證方式是基于Forms的 <authentication?mode="Forms">???<forms?loginUrl="Logon.aspx"?name=".ASPXFORMSAUTH"></forms></authentication><authorization>????<allow?users="*"/></authorization> <forms>元素的有效屬性 Name:?用于身份驗證的Http Cookie的名稱。 LoginUrl:沒有通地驗證的用戶將要被重定向到的登錄頁面的URL. Protection: Cookie數據的保護方法。 TimeOut: Cookie的過期時限,以分鐘為單位。默認值為30 Path:Path用于已發出Cookie的路徑。默認值為”/”。 二、實現復雜的驗證方式(角色控制) 構造GenericPrincipal 和 FormsIdentity 對象 GenericPrincipal : 表示一般用戶 FormsIdentity:表示一個使用?Forms?身份驗證進行了身份驗證的用戶標識 FormsIdentity類由?FormsAuthenticationModule在通過 Forms 身份驗證對用戶進行身份驗證時使用。使用從 Forms 身份驗證 Cookie 或 URL 解密的?FormsAuthenticationTicket創建一個?FormsIdentity的實例。然后,使用此FormsIdentity類的新實例構造一個新的 GenericPrincipal 對象,該對象將設置為當前?HttpContext的?User屬性的值 在Global.asax文件中,添加事件Application_AuthenticateRequest代碼: 注:Application_AuthenticateRequest在這個事件中添加自定義身份驗證的代碼。 1、頁面請求時獲得cookie及角色值 using?System.Web.Security;using?System.Security;//這個事件用于頁面請求時獲得cookie及角色值????protected?void?Application_AuthenticationRequest(object?sender,?EventArgs?e)???{????????//請求傳遞的Cookie集合中獲得窗體身份驗證Cookie????????//FormsCookieName:獲取用于存儲Forms?身份驗證票證的Cookie?名稱????????????????//FormsCookieName?用于引用存儲FormsAuthenticationTicket?信息的Cookie????????string?cookiename?=?FormsAuthentication.FormsCookieName;????????????????????//提供創建和操作各HTTP?Cookie?的類型安全方法????????//HttpCookie類獲取和設置各Cookie?的屬性????????????????HttpCookie?cookie?=?Reauest.Cookies[cookiename];??/*從cookiename得到cookie*/????????if?(cookie?==?null)????????????return;????????//從窗體身份驗證cookie中提取和解密身份驗證票據????????FormsAuthenticationTicket?ticket?=?null;????????try????????{????????????//返回值:一個FormsAuthenticationTicket?對象????????????ticket?=?FormsAuthentication.Decrypt(cookie.Value);??//cookie:加密的身份驗證票????????}????????catch(Exception?err)????????{????????????return;????????}????????if?(ticket?==?null)????????????return;????????//解析出用戶在最初對用戶進行身份驗證時附加到票上的管道分隔的角色名稱列表????????string[]?roles?=?ticket.UserData.Split(new?char[]?{?'|'?});????????//創建一個FormsIdentity對象和一個GenericPrincipal對象。前一個對象從票名稱中????????//獲得用戶名,后一個對象將此標識與用戶角色列表包含在一起????????FormsIdentity?ident?=?new?FormsIdentity(ticket);????????GenericPrincipal?princ?=?new?GenericPrincipal(ident,?roles);????????HttpContext.Current.User?=?princ;???}
{
???String?UserName?=?UserEmail.Text;
???String?UserPass?=?UserPass.Text;
???If(通過連接數據庫判斷用戶和密碼是否正確)
??{
//將經過身份驗證的用戶重定向回最初請求的?URL?或默認?URL
????FormsAuthentication.RedirectFromLoginPage(UserName,?Persist.Checkd);
?//這個函數是否建立Cookie:解決:建立Cookie
??Else
??{
???Msg.Text?=?Invalid?credentials.?Please?try?again.";
??}
} 然后在建立的目錄下,新建一個Web.Config文件 <configuration>?? <system.web>???? ????<authorization>?????? <deny?users="?"?/> 不充許沒經過身份驗證的用戶進行訪問???? ?????</authorization>?? </system.web>??????????????</configuration> 在這個Web.Config文件中,設置了這個目錄下所有文件的授權方式。這是一種URL授權。應用程序根據配置對匿名用戶進行檢查。URL授權在Web.config中的<authorization>區段內定義。 <authorization></authorization>區段中有兩個標記,標記<allow>定義了許的用戶、任務和操作,在<deny>標記中包含了不被充許的用戶、任務和操作。 例如: <allow users = “*”> <deny users = “?”>
??? “*”代表所有的用戶,“?”表示匿名(沒經過身份驗證的)用戶。 在要目下的Web.Config中,我們同時要設置驗證方式是基于Forms的 <authentication?mode="Forms">???<forms?loginUrl="Logon.aspx"?name=".ASPXFORMSAUTH"></forms></authentication><authorization>????<allow?users="*"/></authorization> <forms>元素的有效屬性 Name:?用于身份驗證的Http Cookie的名稱。 LoginUrl:沒有通地驗證的用戶將要被重定向到的登錄頁面的URL. Protection: Cookie數據的保護方法。 TimeOut: Cookie的過期時限,以分鐘為單位。默認值為30 Path:Path用于已發出Cookie的路徑。默認值為”/”。 二、實現復雜的驗證方式(角色控制) 構造GenericPrincipal 和 FormsIdentity 對象 GenericPrincipal : 表示一般用戶 FormsIdentity:表示一個使用?Forms?身份驗證進行了身份驗證的用戶標識 FormsIdentity類由?FormsAuthenticationModule在通過 Forms 身份驗證對用戶進行身份驗證時使用。使用從 Forms 身份驗證 Cookie 或 URL 解密的?FormsAuthenticationTicket創建一個?FormsIdentity的實例。然后,使用此FormsIdentity類的新實例構造一個新的 GenericPrincipal 對象,該對象將設置為當前?HttpContext的?User屬性的值 在Global.asax文件中,添加事件Application_AuthenticateRequest代碼: 注:Application_AuthenticateRequest在這個事件中添加自定義身份驗證的代碼。 1、頁面請求時獲得cookie及角色值 using?System.Web.Security;using?System.Security;//這個事件用于頁面請求時獲得cookie及角色值????protected?void?Application_AuthenticationRequest(object?sender,?EventArgs?e)???{????????//請求傳遞的Cookie集合中獲得窗體身份驗證Cookie????????//FormsCookieName:獲取用于存儲Forms?身份驗證票證的Cookie?名稱????????????????//FormsCookieName?用于引用存儲FormsAuthenticationTicket?信息的Cookie????????string?cookiename?=?FormsAuthentication.FormsCookieName;????????????????????//提供創建和操作各HTTP?Cookie?的類型安全方法????????//HttpCookie類獲取和設置各Cookie?的屬性????????????????HttpCookie?cookie?=?Reauest.Cookies[cookiename];??/*從cookiename得到cookie*/????????if?(cookie?==?null)????????????return;????????//從窗體身份驗證cookie中提取和解密身份驗證票據????????FormsAuthenticationTicket?ticket?=?null;????????try????????{????????????//返回值:一個FormsAuthenticationTicket?對象????????????ticket?=?FormsAuthentication.Decrypt(cookie.Value);??//cookie:加密的身份驗證票????????}????????catch(Exception?err)????????{????????????return;????????}????????if?(ticket?==?null)????????????return;????????//解析出用戶在最初對用戶進行身份驗證時附加到票上的管道分隔的角色名稱列表????????string[]?roles?=?ticket.UserData.Split(new?char[]?{?'|'?});????????//創建一個FormsIdentity對象和一個GenericPrincipal對象。前一個對象從票名稱中????????//獲得用戶名,后一個對象將此標識與用戶角色列表包含在一起????????FormsIdentity?ident?=?new?FormsIdentity(ticket);????????GenericPrincipal?princ?=?new?GenericPrincipal(ident,?roles);????????HttpContext.Current.User?=?princ;???}
? 2、登錄時可以得到用戶信息以及是否已經登錄
//驗證及得到用戶信息????private?void?Page_Load(object?sender,?System.EventArgs?e)????{????????FormsIdentity?userIdentiy;????????FormsAuthenticationTicket?objTecket;????????if?(System.Web.HttpContext.Current.User.Identity.IsAuthenticated)????????{????????????userIdentiy?=?HttpContext.Current.User.Identity;????????????objTecket?=?userIdentiy.Ticket;????????????//可以從Ticket中獲取用戶信息????????}????????else????????{????????????Response.Write("<script>alert('您沒有登陸!');history.back()</script>");????????????//或者指向登錄頁面????????????Response.Redirect("Login.aspx");????????}?}?3、登錄時生成用戶票據
private?string?Authorization(string?username,?string?password)????{????????//用戶登錄驗證????????string?ip?=?System.Web.HttpContext.Current.Request.UserHostAddress;????????string?name?=?username;????????string?pwd?=?password;????????if?(ValidatePwd(name,?pwd)?=?true)??//數據庫驗證,代碼略????????{????????????//創建身份驗證票證????????????FormsAuthenticationTicket?ticker?=?new?FormsAuthenticationTicket(1,?name,?DateTime.Now,????????????????????????????????????????????????DateTime.Now.AddMinutes(30),?false,?"");????????????string?encryptTicket?=?FormsAuthentication.Encrypt(ticker);????????????HttpCookie?cookie?=?new?HttpCookie(FormsAuthentication.FormsCookieName,?encryptTicket);????????????Reponse.AppendCookie(cookie);????????????//將用戶重定向到最初的請求頁面????????????Response.Redirect(FormsAuthentication.GetRedirectUrl(name,?false));????????????//Resonse.Redirect(FormsAuthentication.RedirectFromLoginPage(name,?false));????????????//this.Session["UserName"]?=?username;????????}????????else????????{????????????Response.Write("<script>alert('您的用戶名或密碼錯誤');</script>");????????}????}解釋:
Context.User.Identity.IsAuthenticated
Context:獲取與該頁關聯的?System.Web.HttpContext?對象
User:為當前?HTTP?請求獲取或設置安全信息
Identity:獲取當前用戶的標識
IsAuthenticated:獲取一個bool值,該值指示是否驗證了用戶
總結
以上是生活随笔為你收集整理的ASp.net中Froms验证方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猫猫用吹水机
- 下一篇: .Net使用RabbitMQ详解