Enterprise Library 2.0 -- Security Application Block

本文介绍了EnterpriseLibrary 2.0的安全组件SecurityApplicationBlock,详细阐述了其配置过程及基本使用方法,包括用户认证、授权规则设置等,并提供了自定义授权提供者的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 今天来介绍一下Enterprise Library 2.0中的Security Application Block ,它可以帮助程序开发者在应用程序中实现与授权有关的大部分功能,不仅如此,它还支持缓存我们系统中用户的授权以及,授权数据。主要包括一下几个部分的功 能: 1、减少代码编写量; 2、保持应用程序中安全管理的一致性; 3、提供了应用程序中很多安全问题的实现方法; 4、可扩展,支持自定义Provider。 ...

       关于Security Application Block的介绍部分,我不再多说,具体可以参考帮助文档。下面我们来看一下如何配置Security Application Block,首先打开配置工具,新建一个Security Application Block,如下: 然后在Authorization节点下创建一个Authorization Rule Provider,名称为RuleProvider,如下: 现在就可以在RuleProvider节点下,创建一系列的规则(Rule)了。如下图: 新建了规则,我们还需要为这个规则定义一个表达式,用于在程序中判断是否满足该规则,如下图: 如图所示,我们定义了能通过该规则的用户的身份必须是User或Admin.我们可以根据我们的实际需要定义各种各样的规则。 最后我们可以为我们建立的Security Application Block分配一个默认的Authorization实例,如图: 此时,我们的配置文件中就多了如下内容:

<section name="securityConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Security.Configuration.SecuritySettings, Microsoft.Practices.EnterpriseLibrary.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" /> <securityConfiguration defaultAuthorizationInstance="RuleProvider"     defaultSecurityCacheInstance="">     <authorizationProviders>       <add type="Microsoft.Practices.EnterpriseLibrary.Security.AuthorizationRuleProvider, Microsoft.Practices.EnterpriseLibrary.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"         name="RuleProvider">         <rules>           <add expression="R:User OR R:Admin" name="Rule" />         </rules>       </add>     </authorizationProviders>   </securityConfiguration>

       关于Security Application Block的配置就说到这里。

      下面来看看Enterprise Library 2.0 的Security Application Block 与1.0版本中的一点区别,因为ASP.NET2.0中提供了角色与成员管理的新特性,所以在某些方面和1.0版本还是有一定的区别:     因为ASP.NET2.0提供了MemberShip,Roles两个类,其中包含了验证用户、角色管理以及对Profile信息的设置与读取功能,所以 Security Application Block 2.0将这些功能去掉了。因此和1.0版本的主要区别在于下面三方面: 首先导入下面两个命名空间: using System.Web.Profile; using System.Web.Security; 1、验证用户的方法如下:

        /**//// <summary>         /// 验证用户         /// http://pw.cnblogs.com         /// </summary>         /// <param name="username">用户名</param>         /// <param name="password">密码</param>         /// <returns></returns>         public bool CheckUser(string username, string password)         {             return Membership.ValidateUser(username, password);         }
2、读取或设置Profile信息
        /**//// <summary>         /// 使用 Profile         /// http://pw.cnblogs.com         /// </summary>         [TestMethod]         public void UseProfile()         {             IIdentity identity;             identity = new GenericIdentity("SHY520", Membership.Provider.Name);             //设置Profile             ProfileBase setuserProfile = ProfileBase.Create(identity.Name);             setuserProfile["Name"= "SHY520";             setuserProfile["Address"= "Wuhu China";             //保存Profile信息             setuserProfile.Save();             //读取Profile信息             ProfileBase readuserProfile = ProfileBase.Create(identity.Name);             string Name = readuserProfile["Name"].ToString();             string Address = readuserProfile["Address"].ToString();             Assert.AreEqual(Name,"SHY520");             Assert.AreEqual(Address,"Wuhu China");         }
3、得到某个用户所属角色列表
        /**//// <summary>         /// 得到某用户所属角色列表         /// http://pw.cnblogs.com         /// </summary>         /// <returns>角色列表</returns>         public string[] GetUserRoles()         {             IIdentity identity = new GenericIdentity("SHY520", Membership.Provider.Name);             return Roles.GetRolesForUser(identity.Name);         }

      与上一个版本的区别基本上就是以上几点,下面我们来看看Security Application Block2.0的基本使用方法:

1、为已授权的用户分配一个Token(记号):        Security Application Block将授权用户的身份信息放进缓存,并返回一个Token,所以我们在使用此方之前需要先配置一个Security Cache,具体方法我就不多说了,可以参考官方教程,下面贴出配置后的App.Config中的代码:

<securityCacheProviders>       <add cacheManagerInstanceName="Cache Manager" defaultSlidingSessionExpirationInMinutes="10"         defaultAbsoluteSessionExpirationInMinutes="60" type="Microsoft.Practices.EnterpriseLibrary.Security.Cache.CachingStore.CachingStoreProvider, Microsoft.Practices.EnterpriseLibrary.Security.Cache.CachingStore, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"         name="Caching Store Provider" /> </securityCacheProviders>
这段代码是在securityConfiguration节中的,其中cacheManagerInstanceName是我们在Caching Application Block中配置的实例。
        /**//// <summary>         /// 使用SaveIdentity方法,保存用户身份,并返回一个Token         /// http://pw.cnblogs.com         /// </summary>         /// <returns></returns>         public IToken SaveUserInfo()         {             ISecurityCacheProvider sc = SecurityCacheFactory.GetSecurityCacheProvider("Cache Manager");             //将用户身份装入缓存,并返回一个IToken类型的记号             return sc.SaveIdentity(new GenericIdentity("SHY520"));         }
2、使用Token来验证用户是否已被授权
        /**//// <summary>         /// 根据Token来判断用户是否已被授权         /// http://pw.cnblogs.com         /// </summary>         /// <param name="token"></param>         /// <returns></returns>         public bool CheckUserByToken(IToken token)         {             ISecurityCacheProvider sc = SecurityCacheFactory.GetSecurityCacheProvider("Cache Manager");             //得到Token对应的身份IIdentity             IIdentity savedIdentity = sc.GetIdentity(token);             //返回该身份是否已被授权             return savedIdentity.IsAuthenticated;                      }   
3、结束User Session(即使Token过期)
        /**//// <summary>         /// 使用户Token过期         /// http://pw.cnblogs.com         /// </summary>         public void CloseUserSession()         {             ISecurityCacheProvider sc = SecurityCacheFactory.GetSecurityCacheProvider("Cache Manager");             //保存身份             IToken token = sc.SaveIdentity(new GenericIdentity("SHY520"));             //使身份过期             sc.ExpireIdentity(token);         }
4、判断用户是否满足一定的规则       首先需要导入下面的命名空间:  using System.Security;  using System.Security.Principal;  using Microsoft.Practices.EnterpriseLibrary.Security;
    /**//// <summary>         /// 判断用户是否满足一定的规则         /// http://pw.cnblogs.com         /// </summary>         /// <param name="username">用户名称</param>         /// <param name="role">角色名称</param>         /// <param name="rule">规则名称</param>         /// <returns></returns>         public bool CheckUserRoleByRule(string username, string role, string rule)         {             IPrincipal principal = new GenericPrincipal(new GenericIdentity(username), new string[] { role });             //创建一个默认的Authorization实例             IAuthorizationProvider autoprovider = AuthorizationFactory.GetAuthorizationProvider();             //返回验证是否通过             return autoprovider.Authorize(principal, rule);         }
通过上面的方法可以很简单的实现对用户权限的鉴定,关于Security Application Block的简单应用就说到这里,下面我们来看一下如何实现自定义的authorization provider。 1、首先我们建立自己的Provider类,该类需继承AuthorizationProvider; 2、并且要加上[ConfigurationElementType(typeof(CustomAuthorizationProviderData))]的Attribute; 3、添加构造函数,参数为NameValueCollection类型; 4、覆盖基类中的Authorize方法,在其中添加自己的验证是否授权的逻辑 这样就完成了一个自定义的authorization provider。 完整的类定义如下:
using System; using System.Collections.Generic; using System.Text; using Microsoft.Practices.EnterpriseLibrary.Security; using System.Collections.Specialized; using System.Security.Principal; using Microsoft.Practices.EnterpriseLibrary.Common.Configuration; using Microsoft.Practices.EnterpriseLibrary.Security.Configuration; namespace Enterprise_Library_2 {     [ConfigurationElementType(typeof(CustomAuthorizationProviderData))]     public class CustomProvider : AuthorizationProvider     {         public CustomProvider(NameValueCollection configurationItems)         {                      }         public override bool Authorize(IPrincipal principal, string context)         {             //TODO:在此处添加自己需要的验证授权的逻辑既可             return true;         }     } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值