EnterpriseLibraryStepByStep系列(六):安全應用程式塊——進階篇

技術小甜發表於2017-11-15
  一.     認證(Authentication):
   Authentication是一個確認呼叫者身份的過程,使用時需要考慮以下方面:
1)界定認證的使用邊界(Boundary),尤其當應用系統跨越信任邊界時,一個信任邊界通常包括:AssembliesProcessesHosts
2)確認呼叫者的身份(Caller),通常是使用者名稱和密碼。
關於認證在入門篇裡面我們已經給出了示例程式碼。
二.     授權(Authorization):
     Authorization的作用在於決定一個被認證的使用者是否具有某種業務操作的許可權,不適當的或弱授權可能導致資訊洩露或篡改的風險。通過授權進行深度防範是安全應用的一個重要策略。
Authorization Provider有兩種:
Authorization Manager
Authorization Rule(授權規則)
下面來詳細看一下授權規則的要素:
IIdentities(身份)
RRoles(角色)
Operators(關係操作符)
      AND  OR  NOT  AND ()
舉個例子:R:Employee OR R:Manager OR I:Bob就是一條授權規則
授權規則編輯器介面如下:
 
認證的基本程式碼:
None.gifpublic static bool Authorized(string rule)
ExpandedBlockStart.gif
{
InBlock.gif    
bool authorized = false;
InBlock.gif  
InBlock.gif    IAuthorizationProvider ruleProvider;
InBlock.gif    ruleProvider 
= AuthorizationFactory.GetAuthorizationProvider();
InBlock.gif 
InBlock.gif    authorized 
= ruleProvider.Authorize(Thread.CurrentPrincipal, rule);
InBlock.gif 
InBlock.gif    
return authorized;
ExpandedBlockEnd.gif}
三.     角色(Roles):
在角色中,有兩類基本的授權策略:
      基於角色:Role Based
      基於資源:Resource Based
關於角色授權在GotDotnet上有一個基於資料庫的角色授權企業庫外掛,大家可以下載下來,安裝在自己的機器上。通過配置後,會將授權規則儲存在資料庫中,同時我們可以自行開發一個介面讓使用者輸入。
下載地址:
[url]http://www.cnblogs.com/Files/Terrylee/DBRulesAuthorizationProvider.zip[/url]

四.     
個性化服務(Profiles):
Profiles是系統面向使用者提供的靈活性的個體資訊的容器,一個使用者的Profile可以使以下一種或多種的集合:
(1) 簡單的字串或其他基礎型別
(2) 一個序列化的實體
(3) 基礎型別及序列化實體的Dictionary
儲存個性化資訊:
 1None.gifpublic static void SaveProfile(BaseForm taskForm)
 2ExpandedBlockStart.gif{
 3InBlock.gif    // Collect profile information
 4InBlock.gif    if (_profile == null) _profile = new ProfileInfo();
 5InBlock.gif    _profile.FormColor = taskForm.FormColor;
 6InBlock.gif    _profile.TextColor = taskForm.TextColor;
 7InBlock.gif 
 8InBlock.gif    // Save Profile Information
 9InBlock.gif    IProfileProvider profileProvider;
10InBlock.gif    profileProvider = ProfileFactory.GetProfileProvider(); 
11InBlock.gif    profileProvider.SetProfile(Thread.CurrentPrincipal.Identity, _profile);
12ExpandedBlockEnd.gif}
  
載入個性化資訊:
 1None.gifpublic static void LoadProfile(BaseForm taskForm)
 2ExpandedBlockStart.gif{
 3InBlock.gif    // Lookup profile information
 4InBlock.gif    if (_profile == null)
 5ExpandedSubBlockStart.gif    {
 6InBlock.gif        IProfileProvider profileProvider;
 7InBlock.gif        profileProvider = ProfileFactory.GetProfileProvider(); 
 8InBlock.gif        _profile = (ProfileInfo) profileProvider.GetProfile(
 9InBlock.gif            Thread.CurrentPrincipal.Identity
10InBlock.gif            );
11ExpandedSubBlockEnd.gif    }
 
12InBlock.gif 
13InBlock.gif    // Apply profile
14InBlock.gif    if (_profile == null) _profile = new ProfileInfo();
15InBlock.gif    taskForm.FormColor = _profile.FormColor;
16InBlock.gif    taskForm.TextColor = _profile.TextColor;
17ExpandedBlockEnd.gif}
五.     嚴格的帳號管理策略:
  在應用管理系統中,我們需要有一套嚴格的帳號管理策略,那麼嚴格的帳號管理包括那些方面?
(1) 您的應用是否需要強密碼;
(2) 您是否限制嘗試登陸失敗的次數;
(3) 是否對登陸失敗的原因給與過多的提示;
(4) 是否強制推行密碼的有效期限;
(5) 是否根據特殊事件對Account進行無效處理;
(6) 是否對Login進行日誌處理;
六.     The Security Cache
      在安全應用程式塊中允許對Security相關的資訊進行快取,被快取的喜訊你可以通過Token進行訪問,通過快取而不是每次都進行認證的方式提高系統的效率。
總結:在安全應用程式塊中的內容比較多,不能每一個都給出示例,請大家見諒。建議初學的朋友認真看一下Enterprise Library Hands On Lab,做一些Demo多加以理解。會在以後的專案開發中把安全應用程式塊運用的更好。



















本文轉自lihuijun51CTO部落格,原文連結:http://blog.51cto.com/terrylee/67606 ,如需轉載請自行聯絡原作者



相關文章