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

ASP.NET 捕捉認證狀態變更:HttpModule 實現登入/登出事件監聽 (支援 SSO)

     編輯:關於ASP.NET

ASP.NET 內建 FormsAuthentication_OnAuthenticated 僅支援 Forms 認證、無登出事件、需修改 Global.asax,侷限性大。本文介紹基於 HttpModule + 雙會話表 的通用方案,支援 Forms/Windows/Passport、登入登出雙向監聽、零業務代碼侵入、Web.config 純配置。

核心原理

在 HttpApplication.AcquireRequestState 事件中,維護兩張會話表:

  • 已認證會話表:記錄已通過驗證的 SessionID。
  • 未認證會話表:記錄未通過驗證的 SessionID。

每請求檢查當前 Session 所在表,對比 HttpContext.User.Identity.IsAuthenticated 真實狀態:

狀態判定邏輯動作
新會話 (兩表皆無)首次請求調用所有 SSO Provider 驗證,若任一通過 → 移入已認證表,通知訂閱者
已認證表中預期已登入若實際未認證 → 移入未認證表,通知登出
未認證表中預期未登入若實際已認證 → 移入已認證表,通知登入

效能優化

  • 會話查詢頻率極高 (每請求一次),採用 字串陣列 + BinarySearch 維持有序,O(log n) 查詢。
  • 新增/刪除會話時調整陣列順序,維持排序狀態。
  • 按命中率優先比對:已認證表通常最大、命中率最高,優先檢查。

架構介面 (三介面極簡設計)

  1. IConfigContext:配置參數上下文。
  2. ISSOProvider:SSO 提供者介面,兼做狀態變更 Handler (登入/登出通知)。
  3. IHandlerFactory:Handler 工廠,控制實例化時機與構造自由度。

全部透過 web.config 註冊,業務層零感知,Global.asax 零修改。

適用場景

  • 單點登入 (SSO) 整合:登入前檢查 SSO Provider、登入後載入權限、登出通知 SSO 清理 Cookie。
  • 跨認證模式統一監聽:Forms + Windows 混合環境。
  • 審計日誌、在線用戶統計、會話劫持檢測。

此方案將認證狀態感知從「硬編碼耦合」升級為「可配置、可擴展、透明無感」的基礎設施能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved