ASP.NET2.0應用中定制安全憑證之理論篇
發表于:2007-07-14來源:作者:點擊數:
標簽:
閱讀提要 在缺省狀況下,你只能使用Visual Studio 2005的一個本機實例來管理與ASP.NET 2.0一同發行的 SQL Server 數據庫 中的 安全 憑證。本文將向你展示怎樣用一個Web服務來包裝ASP.NET 2.0提供者并通過使用一個 Windows 表單應用程序來管理憑證存儲從而擴
閱讀提要 在缺省狀況下,你只能使用Visual Studio 2005的一個本機實例來管理與ASP.NET 2.0一同發行的
SQL Server
數據庫中的
安全憑證。本文將向你展示怎樣用一個Web服務來包裝ASP.NET 2.0提供者并通過使用一個
Windows表單應用程序來管理憑證存儲從而擴展這種管理能力。
如今,無論是互聯網還是企業內部局域網程序一般都要求使用定制的方式來存儲和管理用戶帳戶和角色。為此,ASP.NET 2.0提供了一個現成的提供者模型和一個SQL Sever數據庫。不幸的是,只能通過Visual Studio 2005來管理該憑證數據庫且只能針對本機Web應用程序。這無疑是非常不方便而且不能廣泛使用的。
本文描述了一個超級用戶可以使用的完全定制的安全管理應用程序。這個應用程序通過用一個WEB服務對ASP.NET 2.0提供者進行了包裝并增加了一些功能。本文詳細描述了其中的設計方法,面臨的問題和包含在應用程序中的技術。同時還向你介紹了一些有用而強有力的技術,如基于接口的Web服務,基于反射的Web服務
兼容性,高級C# 2.0編程,Web服務安全性和Web服務事務等。
一、ASP.NET 2.0憑證基礎結構 基于互聯網的應用程序常常不依賴Windows帳戶和組,而是依賴于基于表單的認證并結合某種如
SQL Server的后臺定制憑證存儲。為了幫助
開發者免除重復設計和構建這樣的
解決方案,ASP.NET 2.0發行中加入了一個現成的安全憑證基礎結構。ASP.NET 2.0憑證存儲并不僅可用于ASP.NET應用程序,而且ASP.NET Web服務和Windows表單應用程序都能使用它來管理它們的用戶憑證。另外,Windows通訊基礎(編碼名為Indigo)服務也能被容易地設置來使用ASP.NET 2.0安全憑證存儲。
ASP.NET 2.0使用一提供者模型來訪問和管理憑證以避免把應用程序耦合到任何特定存儲上。在利用抽象提供者模型的優點的同時由
程序員來開發這個應用程序。超級用戶負責選擇和管理特定的憑證存儲。圖1顯示出ASP.NET 2.0安全提供者的架構。
 圖1.ASP.NET 2.0安全提供者模型 |
Membership Provider負責管理用戶,而Role Provider負責管理角色。在憑證存儲中,每個用戶或角色僅限于一應用程序之內。這樣就允許不同應用程序使用一樣的憑證存儲而不會與彼此的用戶名或角色相沖突。ASP.NET為SQL
服務器、Windows和活動目錄(見圖1)等的憑證存儲提供支持。為了安裝SQL Server憑證數據庫,可以運行aspnet_reg
sql.exe程序,其位置是:
<WINDOWS>\Microsoft.NET\Framework\<version>
這個安裝程序創建一個稱為aspnetdb的新數據庫-它包含一組應用程序的表、用戶、角色以及存取這些表的存儲過程。這個SQL Server數據庫是運用最新的安全技術經過精心設計的。另外,ASP.NET 2.0還提供一套相應于提供者的類(圖1)。
使用哪個提供者的信息被保存在應用程序的配置文件(App.Config或Web.Config)中。你幾乎不需要直接與特定的提供者進行交互;而是,存在兩個靜態助理類:Membership和Roles-它們負責從配置文件中讀取使用哪個提供者。默認的提供者(即當沒有指定提供者時)就是SQL Server。Membership類(列表1)允許你創建和刪除用戶,檢索關于用戶的信息并觀看口令策略。
列表1: Membership助理類
clearcase/" target="_blank" >cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
[Serializable] public class MembershipUser{ public virtual bool ChangePassword(string oldPassword,string newPassword); public virtual string GetPassword(string passwordAnswer); public virtual string ResetPassword(string passwordAnswer); public virtual bool UnlockUser(); //其它成員 } public static class Membership{ public static string ApplicationName{get;set;} public static MembershipUser CreateUser(string username, string password); public static MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, out MembershipCreateStatus status); public static bool DeleteUser(string username,bool deleteAllRelatedData); public static MembershipUser GetUser(string username); public static void UpdateUser(MembershipUser user); public static bool ValidateUser(string username,string password); public static bool EnablePasswordReset{get;} public static bool EnablePasswordRetrieval{get;} //其它成員 } |
例如,為了在"MyApp"應用程序中創建一新用戶,你僅需如下編碼:
原文轉自:http://www.kjueaiud.com