一.安全應用程序塊概述:
安全應用程序塊通過一個或多個安全機制,幫助開發人員在應用程序中實現通用的安全相關任務。
需要提高擴展性,以便在不改變應用程序代碼的情況下更改認證或授權方式。
提供了以下幾個方面的功能:
1.認證
2.授權
3.角色管理
4.Profile管理
二.幾個重要的概念:
1.Credential(令牌)
2.Identity(身份)
3.Principal(主體特征)
三.使用三部曲:
在進行使用前請確保項目中有App.config或Web.config文件,並且需要數據庫中有相關的表和存儲過程,具體可參見數據庫EntLibQuickStarts(Enterprise Library的示例庫)。
1.定義配置文件:
(1)運行Enterprise Library Configuration 配置工具,打開項目中的配置文件;
(2)右擊Application,選擇New | Security Application Block,創建一個安全應用程序塊;
(3)在Security Application Block | Authentication 節點上右擊,選擇 New | Database Authentication Provider,創建一個數據庫認證Provider;
(4)根據在數據訪問應用程序塊中所講的,設置數據庫的連接字符串;
(5)右擊Cryptography Application Block | Hash Providers,選擇New | Hash Algorithm Provider,創建一個加密Provider,並設置SaltEnabled為True;
(6)選擇Security Application Block | Authentication | Database Provider,設置 Database 屬性為 Database Instance, 並且設置 HashProvider 屬性為SHA1Managed;
(7)選擇Security Application Block,設置它的DefaultAuthenticationInstance為Database Provider;
(8)選擇File | Save All保存全部。
至此,關於認證部分的配置已經做完。僅僅有這些還不夠,我們還要進行設置角色。
(9)選擇Security Application Block,右擊Roles,選擇New | Role Database Provider創建一個角色的數據庫Provider;
(10)設置Database屬性為Database Instance;
(11)選擇Security Application Block節點,設置DefaultRolesInstance,為RolesDatabase Provider;
(12)保存全部File | Save All。
至此,所有的配置文件的工作已經做完。最後別忘了,做拷貝目錄
1 copy "$(ProjectDir)\*.config" "$(TargetDir)"
2.創建Security Provider實例:
1IAuthenticationProvider authprovider;
2 authprovider = AuthenticationFactory.GetAuthenticationProvider();
3.執行Security Provider命令:
1 public static bool Authenticate(string username, string password)
2 {
3 bool authenticated = false;
4
5
6 NamePasswordCredential credentials;
7 credentials = new NamePasswordCredential(username, password);
8
9 IAuthenticationProvider authprovider;
10 authprovider = AuthenticationFactory.GetAuthenticationProvider();
11
12 IIdentity identity;
13 authenticated = authprovider.Authenticate(credentials, out identity);
14
15 if (!authenticated)
16 {
17 throw new SecurityException("Invalid username or password.");
18 }
19
20
21
22 IRolesProvider rolesprovider;
23 rolesprovider = RolesFactory.GetRolesProvider();
24
25 IPrincipal principal;
26 principal = rolesprovider.GetRoles(identity);
27
28 // Place user's principal on the thread
29 Thread.CurrentPrincipal = principal;
30
31 return authenticated;
32 }
入門篇就到這裡了,安全應用程序塊內容比較多,所以有些步驟裡面我沒有截圖,請大家諒解。在進階篇裡面,我會分別介紹認證,授權(包括授權規則),角色,個性化服務,以及嚴格的帳號管理策略,Security Cache,包括第三方的基於數據庫角色授權的插件等。