首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET Forms 驗證詳解 (上):工作原理、核心 API 與驗證流程

     編輯:關於ASP.NET

Forms 驗證是 ASP.NET 最彈性、最常用的驗證模式。本文解析其基於 Cookie 的運作流程、核心 API (FormsAuthenticationModule、FormsAuthentication、FormsIdentity、FormsAuthenticationTicket) 以及從匿名請求到驗證通過的完整生命週期。

工作原理:Cookie 為憑證

  1. 匿名使用者請求受保護頁面 (如 Default.aspx)。
  2. URL 授權模組檢測未驗證 → 重導至 loginUrl (Login.aspx),並保存原始 URL 於 ReturnUrl 參數。
  3. 使用者輸入帳號密碼送出。
  4. 伺服器驗證通過 → 建立 FormsAuthenticationTicket (含使用者名、UserData、到期時間) → FormsAuthentication.Encrypt 加密 → 寫入 Cookie → 發送瀏覽器。
  5. 瀏覽器攜帶 Cookie 重導回原始頁面 (Default.aspx)。
  6. 後續請求:FormsAuthenticationModule 在 AuthenticateRequest 解密 Cookie、驗證 MAC、還原 Ticket → 建立 FormsIdentity + GenericPrincipal → 指派 Context.User。
  7. 授權模組依 Context.User 檢查權限 → 允許存取。

核心 API 類別

類別命名空間職責
FormsAuthenticationModuleSystem.Web.SecurityHTTP 模組,掛接 AuthenticateRequest,自動解密 Cookie 建立 Principal
FormsAuthenticationSystem.Web.Security靜態輔助類:RedirectFromLoginPage、SetAuthCookie、Encrypt/Decrypt、SignOut、GetAuthCookie
FormsIdentitySystem.Web.Security實作 IIdentity,屬性 Ticket 取得原始 Ticket
FormsAuthenticationTicketSystem.Web.Security資料容器:Name、UserData、Expiration、IsPersistent 等

常用靜態方法範例


// 簡易登入:自動建立 Ticket、加密、寫入 Cookie、重導
FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie: true);

// 手動控制 Ticket 內容
var ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now,
    DateTime.Now.AddHours(2), true, "UserId=123|Role=Admin", "/");
string enc = FormsAuthentication.Encrypt(ticket);
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, enc));

// 登出
FormsAuthentication.SignOut();

驗證流程序列圖

User -> Browser: GET /Default.aspx
Browser -> IIS: Request
IIS -> ASP.NET Pipeline: BeginRequest
Pipeline -> UrlAuthModule: AuthorizeRequest -> 401 Unauthorized
Pipeline -> Response: 302 Redirect /Login.aspx?ReturnUrl=/Default.aspx
Browser -> User: Show Login Form
User -> Browser: POST /Login.aspx (credentials)
Browser -> Pipeline: AuthenticateRequest (FormsAuthModule: no cookie yet)
Pipeline -> Login.aspx: Page_Load -> btnLogin_Click
Login.aspx -> AuthHelper: ValidateUser -> success
Login.aspx -> FormsAuth: Create Ticket, Encrypt, Set Cookie
Login.aspx -> Response: 302 Redirect /Default.aspx
Browser -> Pipeline: AuthenticateRequest (FormsAuthModule: decrypt cookie -> Principal)
Pipeline -> UrlAuthModule: AuthorizeRequest -> Allow
Pipeline -> Default.aspx: Page Lifecycle -> Render
Browser -> User: Show Protected Page

關鍵觀念

  • 驗證狀態完全儲存在客戶端 Cookie,伺服器無 Session 狀態 (除非自行實作)。
  • FormsAuthenticationModule 是自動化關鍵,手動建立 Cookie 仍需該模組解析。
  • machineKey 決定加密/驗證金鑰,Web Farm 必須同步。
  • Ticket 到期時間以 UTC 儲存,跨時區正確。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved