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

ASP.NET 2.0 Membership 架構原理與擴充實戰

     編輯:關於ASP.NET

核心抽象類別:MembershipProvider

所有 Membership 功能均透過 MembershipProvider 衍生類別實作,框架內部僅依賴此抽象介面。主要抽象方法包含:CreateUser、ValidateUser、ChangePassword、GetUser、FindUsersByName 等;屬性包含 ApplicationName、PasswordFormat、RequiresUniqueEmail 等設定。

設計缺陷:Internal 輔助方法無法復用

基類中密碼加密/解密/驗證輔助方法(EncodePassword、DecryptPassword、EncryptPassword、GenerateSalt、UnEncodePassword)標記為 internal,導致自訂 Provider 無法直接呼叫,只能自行重寫或透過反射繞過。建議微軟改為 protected 以利繼承複用。

SqlMembershipProvider 運作流程

  1. 設定檔指定 connectionStringName、applicationName、passwordFormat(Clear/Hashed/Encrypted)。
  2. 呼叫 aspnet_regsql.exe 建立 aspnetdb 資料庫(含 Users、Roles、Applications 等資料表與預存程序)。
  3. 靜態 Membership 類別依設定檔實例化指定 Provider,委派所有操作。

擴充實戰:自訂 Provider 關鍵步驟

  1. 繼承 MembershipProvider,實作所有抽象成員。
  2. 資料存取層可使用 ADO.NET、Entity Framework 或任意 ORM。
  3. 密碼處理建議參考原始碼邏輯:鹽值生成、雜湊(HMACSHA256)、加密(AES)。
  4. 在 web.config 註冊新 Provider 並設為 defaultProvider。

最佳實務提醒

  • 務必實作 ApplicationName 隔離多應用程式使用者。
  • 密碼重設流程需驗證安全問題答案,防止枚舉攻擊。
  • 大量使用者查詢(GetAllUsers、FindUsersByName)必須支援分頁,避免記憶體溢位。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved