Enterprise Library Step By Step系列(六):安全应用程序块——进阶篇

简介:
   一.     认证(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 就是一条授权规则
授权规则编辑器界面如下:
 
认证的基本代码:
None.gif public   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
保存个性化信息:
 1 None.gif public   static   void  SaveProfile(BaseForm taskForm)
 2 ExpandedBlockStart.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}
  
加载个性化信息:
 1 None.gif public   static   void  LoadProfile(BaseForm taskForm)
 2 ExpandedBlockStart.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  ,如需转载请自行联系原作者


相关文章