一.認證(Authentication):
Authentication是一個確認調用者身份的過程,使用時需要考慮以下方面:
(1)界定認證的使用邊界(Boundary),尤其當應用系統跨越信任邊界時,一個信任邊界通常包括:Assemblies,Processes,Hosts
(2)確認調用者的身份(Caller),通常是用戶名和密碼。
關於認證在入門篇裡面我們已經給出了示例代碼。
二.授權(Authorization):
Authorization的作用在於決定一個被認證的用戶是否具有某種業務操作的權限,不適當的或弱授權可能導致信息洩露或篡改的風險。通過授權進行深度防范是安全應用的一個重要策略。
Authorization Provider有兩種:
Authorization Manager
Authorization Rule(授權規則)
下面來詳細看一下授權規則的要素:
I:Identities(身份)
R:Roles(角色)
Operators(關系操作符)
AND OR NOT AND ()
舉個例子:R:Employee OR R:Manager OR I:Bob就是一條授權規則
授權規則編輯器界面如下:
認證的基本代碼:
public static bool Authorized(string rule)
{
bool authorized = false;
IAuthorizationProvider ruleProvider;
ruleProvider = AuthorizationFactory.GetAuthorizationProvider();
authorized = ruleProvider.Authorize(Thread.CurrentPrincipal, rule);
return authorized;
}
三.
角色(Roles):
在角色中,有兩類基本的授權策略:
基於角色:Role Based 基於資源:Resource Based
關於角色授權在GotDotnet上有一個基於數據庫的角色授權企業庫插件,大家可以下載下來,安裝在自己的機器上。通過配置後,會將授權規則保存在數據庫中,同時我們可以自行開發一個界面讓用戶輸入。
下載地址:
http://files.cnblogs.com/Terrylee/DBRulesAuthorizationProvider.zip
四.個性化服務(Profiles):
Profiles是系統面向用戶提供的靈活性的個體信息的容器,一個用戶的Profile可以使以下一種或多種的集合:
(1) 簡單的字符串或其他基礎類型(2) 一個序列化的實體(3) 基礎類型及序列化實體的Dictionary
保存個性化信息:
1public static void SaveProfile(BaseForm taskForm)
2{
3 // Collect profile information
4 if (_profile == null) _profile = new ProfileInfo();
5 _profile.FormColor = taskForm.FormColor;
6 _profile.TextColor = taskForm.TextColor;
7
8 // Save Profile Information
9 IProfileProvider profileProvider;
10 profileProvider = ProfileFactory.GetProfileProvider();
11 profileProvider.SetProfile(Thread.CurrentPrincipal.Identity, _profile);
12}
加載個性化信息:
1public static void LoadProfile(BaseForm taskForm)
2{
3 // Lookup profile information
4 if (_profile == null)
5 {
6 IProfileProvider profileProvider;
7 profileProvider = ProfileFactory.GetProfileProvider();
8 _profile = (ProfileInfo) profileProvider.GetProfile(
9 Thread.CurrentPrincipal.Identity
10 );
11 }
12
13 // Apply profile
14 if (_profile == null) _profile = new ProfileInfo();
15 taskForm.FormColor = _profile.FormColor;
16 taskForm.TextColor = _profile.TextColor;
17}