Web驗證方式(2)--Form Authentication

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給瀏覽器

詳見FormAuthenticationModule源碼

要在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錯誤嗎。

詳見UrlAuthorizationModule源碼

 

小結:

Form Authentication是ASP.NET框架中內置的驗證方式。其採用cookie做爲驗證ticket的保存方式,cookie默認是session內有效。

測試代碼見https://github.com/lbwxly/Authentication

相關文章
相關標籤/搜索