Form驗證方式並非HTTP標準,而是在微軟ASP.NET Web框架下提供的一種驗證方式。其大體流程以下:git
在上圖的流程中,ASP.NET框架提供了以下支持類:( FormsAuthentication, FormsAuthenticationModule )github
在上面流程圖中的第三步中,咱們對用戶名密碼進行驗證後。web
-能夠建立FormAuthenticationTicket對象,將用戶數據存入其中。瀏覽器
-而後調用FormAuthentication類的工具方法Encrypt獲得加過密的ticket字符串cookie
-將加過密的ticket字符串寫入名爲FormAuthentication.FormCookieName的cookie中session
-後續的請求中,瀏覽器都會帶上該cookie.框架
在上面流程圖第四步中,FormAuthenticationModule會在IIS的Authenticate事件中進行請求攔截工具
-對請求中攜帶的名爲FormAuthentication.FormCookieName的cookie值進行驗證(解密)測試
-若是驗證經過,用cookie中攜帶的用戶信息建立GenericPrinciple對象並保存在當前請求的HttpContext中,並將該請求設爲Authenticatedurl
-若是驗證不經過,或者沒有找到對應的cookie,則返回401給瀏覽器
要在ASP.NET應用中開啓Form Authenticate驗證方式,只需添加以下配置到<system.web>配置節:
<authentication mode="Forms"> <forms loginUrl="Login" name="JW.Auth" />//此處定義了登陸url和cookie的名字 </authentication>
上面的流程圖中有一個環節尚未描述到,步驟1和步驟4中會對用戶進行驗證是否有訪問改頁面的權限。ASP.NET中能夠經過以下配置到<system.web>配置節來拒絕未登陸用戶:
<authorization> <deny users="?"/>//此處拒絕全部爲登陸用戶,此處還能夠添加<allow>節點容許特定用戶,role發起特定的http method,可是沒有與url的映射起來感受有點雞肋了。實際項目中能夠實現本身的驗證邏輯 </authorization>
ASP.NET框架是經過上面類圖中的UrlAuthorizationModule這個Http Module在IIS的Authorization Request環節對請求按照配置進行受權。未受權的請求則返回401錯誤嗎。
小結:
Form Authentication是ASP.NET框架中內置的驗證方式。其採用cookie做爲驗證ticket的保存方式,cookie默認是session內有效。