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

  一.     认证(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就是一条授权规则

授权规则编辑器界面如下:

 

认证的基本代码:

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}

五.     严格的帐号管理策略:

  在应用管理系统中,我们需要有一套严格的帐号管理策略,那么严格的帐号管理包括那些方面?

(1) 您的应用是否需要强密码;

(2) 您是否限制尝试登陆失败的次数;

(3) 是否对登陆失败的原因给与过多的提示;

(4) 是否强制推行密码的有效期限;

(5) 是否根据特殊事件对Account进行无效处理;

(6) 是否对Login进行日志处理;

六.     The Security Cache

      在安全应用程序块中允许对Security相关的信息进行缓存,被缓存的喜讯你可以通过Token进行访问,通过缓存而不是每次都进行认证的方式提高系统的效率。

总结:在安全应用程序块中的内容比较多,不能每一个都给出示例,请大家见谅。建议初学的朋友认真看一下Enterprise Library Hands On Lab,做一些Demo多加以理解。会在以后的项目开发中把安全应用程序块运用的更好。

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

posted on 2005-10-27 12:52 TerryLee 阅读(4870) 评论(23)  编辑 收藏 所属分类: Enterprise Library

评论

#1楼  2005-10-27 13:18 cnxinxin [未注册用户]

好好学习   回复  引用    

#2楼 [楼主] 2005-10-27 14:13 Terrylee      

TO:cnxinxin
大家共同学习,共同提高:)   回复  引用  查看    

#3楼  2005-10-27 22:02 高海东      

您好
说句实话这篇没有其它的写的好
这个的内容是很多,希望您能写的详细点
补充好
这一块也是很重要的一块,很常用的
可以放两次来写,最个每个功能点来个例子   回复  引用  查看    

#4楼  2005-10-29 07:42 玻璃*bei [未注册用户]

希望能够写详细点,分为几篇写也可以
最后向上几篇一样,截图+实例

最后非常感谢你带给我们这么好的入门文章!!   回复  引用    

#5楼 [楼主] 2005-10-29 19:48 Terrylee      

TO:高海东 玻璃*bei
谢谢二位的支持和提醒

这两天项目太紧了,写的有些匆忙,对不起大家!

有时间我一定会把这篇文章补充全的

有你们的支持,后面文章我一定会写的更好^_^   回复  引用  查看    

#6楼  2005-12-02 10:41 高海东      

这个好像还没有完善   回复  引用  查看    

#7楼  2005-12-16 13:19 高海东      

这个什么时候可以完善   回复  引用  查看    

#8楼  2005-12-19 13:54 robindna [未注册用户]

认证(Authentication)
完结束之后,返回了一个接口类,不能串列话,在做认证WebService的时候就有问题了,
这样webservice没法返回。因为这个认证要跨应用系统,所以必须通过webservice,不知道安全程序块有没有什么机制可以适应这种需求。   回复  引用    

#9楼  2005-12-31 22:08 高海东      

搂主不厚道, 说好要完善这个的,但是写了那么多了,也不见完善这篇文章   回复  引用  查看    

#10楼  2006-01-08 16:38 SilentVolcano [未注册用户]

是啊,正等着楼主完善这一部分的内容呢:)   回复  引用    

#11楼  2006-02-24 13:13 高海东      

看来楼主是不打算完善了   回复  引用  查看    

#12楼 [楼主] 2006-02-24 14:10 Terrylee      

@高海东
EL2.0已经出来了,我想我再完善估计也没有多大意义了
有机会写写2.0的吧,呵呵
关于EL2.0的文章还不多……   回复  引用  查看    

#13楼  2006-05-19 11:48 xiaoshuai [未注册用户]

你们好:
我是一个初学者,我想知道一下几个问题希望大家能帮帮我谢谢哈
1EntLib安全应用程序块的使用防范
2基于EntLib安全应用程序块的解决方案
3基于EntLib安全应用程序块的企业应用安全解决方案
(答案越详细越好哈!)
谢谢大家了。我等着急用呢。
  回复  引用    

#14楼  2006-09-13 17:53 藤条焖猪肉[匿名]      

@robindna

可以使用IToken.Value返回一个Ticket字符串,以后再通过此Ticket调用WebService进行验证.
此Block里只有GuidToken一个实现IToken接口的类.
所以可以通过 IToken token = new GuidToken( strTicket );得到一个IToken实例, 之后就可以利用IToken了.

不知道TerryLee还有没有补充的呢   回复  引用  查看    

#15楼  2007-11-28 13:27 RyanYu      

看得不是很懂~   回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-12-09 16:24 编辑过
 
另存  打印
 





导航

公告

  • 网名:TerryLee
  • 本名:李会军
  • 位置:中国北京 Ethos
  • 联系方式:
  • 访问我的个人主页

 MVP配置

 版权声明

  • 本站采用创作共用许可 署名,非商业

绿色通道

IT新闻

统计

与我联系

留言簿(323)

我的标签

随笔分类

随笔档案

个人站点

关注项目

好的网站

我的好友

搜索

积分与排名

阅读排行榜

评论排行榜