開發(fā)人員經(jīng)常編寫需要安全功能的應(yīng)用程序。這些應(yīng)用程序通常需要執(zhí)行一系列不同的安全操作,而且它們還經(jīng)常與不同的基礎(chǔ)安全提供程序(如 Microsoft Active Directory 目錄服務(wù)、授權(quán)管理器、Active Directory 應(yīng)用程序模式 (ADAM) 和自定義數(shù)據(jù)庫等)進行交互。
安全應(yīng)用程序塊通過收集開發(fā)人員必須執(zhí)行的許多最常見的安全任務(wù),來簡化開發(fā)人員的工作。每個任務(wù)都以一致的方式處理,從特定的安全提供程序中抽象出應(yīng)用程序代碼并使用最佳做法。您甚至可以通過更改配置來更改基礎(chǔ)提供程序,而無需更改基礎(chǔ)應(yīng)用程序代碼。
驗證應(yīng)用程序塊功能框架如下圖所示:
幾個基本概念:
(1) Ticket:提供對票證的屬性和值的訪問,這些票證用于Forms身份驗證,對用戶進行標(biāo)識??梢允褂?/span>FormsIdentity 類的 Ticket 屬性訪問當(dāng)前經(jīng)過身份驗證的用戶的 FormsAuthenticationTicket。通過將當(dāng)前User 的 Identity 屬性強制轉(zhuǎn)換為類型FormsIdentity,可以訪問當(dāng)前 FormsIdentity 對象。
(2) Token:與當(dāng)前執(zhí)行線程關(guān)聯(lián)的訪問標(biāo)記的句柄,用于獲取用戶的Windows帳戶標(biāo)記。通常,通過調(diào)用非托管代碼(如調(diào)用Win32 API LogonUser 函數(shù))來檢索該帳戶標(biāo)記。
(3) Identity:Identity 封裝有關(guān)正在驗證的用戶或?qū)嶓w的信息。在最基本的級別上,Identity包含名稱和身份驗證類型。名稱可以是用戶名或 Windows 帳戶名,而身份驗證類型可以是所支持的登錄協(xié)議(如 Kerberos V5)或自定義值。.NET Framework 定義了一個 GenericIdentity 對象和一個更專用的WindowsIdentity 對象;前者可用于大多數(shù)自定義登錄方案,而后者可用于在希望應(yīng)用程序依賴于 Windows 身份驗證的情況中。此外,您還可以定義自己的標(biāo)識類來封裝自定義用戶信息。
(4) Principal:Principal 表示代碼運行時所在的安全上下文。實現(xiàn)基于角色的安全性的應(yīng)用程序?qū)⒒谂c主體對象關(guān)聯(lián)的角色來授予權(quán)限。同標(biāo)識對象類似,.NET Framework 提供 GenericPrincipal 對象和 WindowsPrincipal 對象。您還可以定義自己的自定義主體類。
下面介紹如何使用Microsoft Enterprise Library 5.0中的驗證應(yīng)用程序模塊.
1. 運行EntLibConfig.exe,選擇Blocks菜單 ,單擊 Add Database Settings .
2. 點擊Authorization Providers 區(qū)塊右上角的加號按鈕, Add Authorization Providers然后點擊 Add Authorization Rule Provider :
3. 在Authorition Rule Provider面板上右鍵,點擊Add Authorization Rule,我們將新建的Rule名稱設(shè)置為GetAllCollege,表示只有符合驗證表達(dá)式的用戶或角色才被允許執(zhí)行獲取所以College操作的權(quán)限:
4. 點擊Rule Expression右邊的…按鈕,彈出驗證表達(dá)式編輯對話框:
5. 在Authorition Rule Provider面板上右鍵,點擊Add Authorization Rule,添加一個憑據(jù)緩存:
6. 點擊File菜單,單擊Save,保存為一個App.config文件,可以先保存到桌面,之后要用到它.
7. 創(chuàng)建一個新的控制臺應(yīng)用程序,將App.config添加到程序內(nèi),并加入需要的Dll文件,在此我們要導(dǎo)入的是 Microsoft.Practices.EnterpriseLibrary. Security.dll, Microsoft.Practices.EnterpriseLibrary. Security.Cache.CachingStore.dll并添加需要的引用:
8. 測試:
9. 運行結(jié)構(gòu):