当前位置:编程学习 > 网站相关 >>

[WCF权限控制]WCF的三种授权模式

目录:
一、三种授权模式
二、RoleProviderPrincipal
三、ServiceAuthorizationBehavior
一、三种授权模式
安全主体具有两个基本的要素:身份与权限。身份在客户端经过认证之后已经确立下来,现在需要解决的问题就是如何获取被认证用户的权限。为了解决这个问题,WCF为我们提供了不同的方案,我们把这些方案成为不同的“安全主体权限模式(Principal Permission Mode)”。具体来说,WCF支持如下三种安全主体权限模式。

采用Windows用户组:将经过认证的用户映射为同名的Windows帐号,将该帐号所在的用户组作为权限集;
采用ASP.NET Roles提供程序:通过ASP.NET角色管理机制借助于某个RoleProvider获取基于当前认证用户的角色列表,并将其作为权限集;
自定义权限模式:自定义权限解析和安全主体创建机制。
在WCF关于安全应用编程接口中,安全主体权限模式通过System.ServiceModel.Description.PrincipalPermissionMode枚举表示。下面的代码片断表示PrincipalPermissionMode的定义。

1: public enum PrincipalPermissionMode  

2: {  

3:     None,  

 4:     UseWindowsGroups,  

 5:     UseAspNetRoles,  

6:     Custom  

 7:

}
采用的安全主体权限模式决定了最终生成的安全主体的类型。之前我们介绍了WindowsPrincipal和GenericPrincoipal,而UseAspNetRoles模式对应的是另一种安全主体类型:RoleProviderPrincipal。

二、RoleProviderPrincipal
RoleProviderPrincipal定义在System.ServiceModel.Security命名空间下。RoleProviderPrincipal顾名思义,就是基于ASP.NET RoleProvider授权模式下产生的安全主体。和X509Identity一样,RoleProviderPrincipal仅仅是定义在System.ServiceModel程序集中的一个内部类型而已。下面的代码片断体现了RoleProviderPrincipal的定义。

 1: internal sealed class RoleProviderPrincipal : IPrincipal  

2: {     

 3:     public RoleProviderPrincipal(object roleProvider, ServiceSecurityContext securityContext);  

4:     public bool IsInRole(string role);  

5:     public IIdentity Identity { get; }  

6: }


三、ServiceAuthorizationBehavior
在运行时,WCF的服务端框架根据当前DispatchRuntime的PrincipalPermissionMode属性判断具体采用哪种安全主体权限模式。如果采用UseAspNetRoles模式,通过RoleProvider属性得到用于获取角色列表的RoleProvider。PrincipalPermissionMode和RoleProvider在DispatchRuntime中的定义如下所示。

 1: public sealed class DispatchRuntime  

 2: {  

3:     //其他成员  

 4:     public PrincipalPermissionMode PrincipalPermissionMode { get; set; }  

5:     public RoleProvider RoleProvider { get; set; }  

6: }
而DispatchRuntime的上述两个属性最终是通过一个特殊的服务行为进行设置的,该服务行为的类型为ServiceAuthorizationBehavior。从下面的代码片断中可以看到PrincipalPermissionMode和RoleProvider两属性依然定义在ServiceAuthorizationBehavior中。定义在ServiceAuthorizationBehavior中的授权相关的设置最终通过ApplyDispatchBehavior方法被应用到所有终结点分发器(EndpointDispatcher)的DispatchRuntime上。

 1: public sealed class ServiceAuthorizationBehavior : IServiceBehavior  

 2: {  

3:     //其他成员  

4:     void IServiceBehavior.AddBindingParameters(ServiceDescription description, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection parameters);  

 5:     void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase serviceHostBase);  

6:     void IServiceBehavior.Validate(ServiceDescription description, ServiceHostBase serviceHostBase);  

 7:    

 8:     public PrincipalPermissionMode PrincipalPermissionMode { get; set; }  

 9:     public RoleProvider RoleProvider { get; set; } 

10: }

补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,