前面的两篇文章(《从两个重要的概念谈起:Identity与Principal[上篇]》和《从两个重要的概念谈起:Identity与Principal[下篇]》)主要探讨基于安全主体的授权。通过这些介绍我们知道:如果我们在实施授权的时候,当前线程的安全主体能够被正确设置,我们就可以正确地完成授权。基于相同的原理,对于WCF的服务授权,如果正确的安全主体能够在服务操作被执行之前被正确设置到当前线程,借助于这个安全主体,我们不但可以采用命令式编程的方式将授权逻辑写在相应的操作中,也可以采用声明式编程的方式将授权策略定义在应用在服务操作方法上的PrincipalPermissionAttribute特性中。

目录:
一、三种授权模式
二、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: }

转载于:https://www.cnblogs.com/artech/archive/2011/07/01/authorizationmode.html

[WCF权限控制]WCF的三种授权模式相关推荐

  1. lumen认证中出现unauthorized._网工知识角|一分钟搞定802.1x认证配置,了解三种授权模式的区别...

    k点上方蓝字关注公众号,坚持每天技术打卡 学网络,就在IE-LAB 国内最著名的高端网络工程师培养基地 今天让我们简单看下802.1x的基本配置. 我们先考虑一下配置接口的授权方式: 接口的802.1 ...

  2. 华为云电脑.模式_今晚0元学华为云计算HCIA课程!快上车,提前了解云计算三种服务模式...

    点上方蓝字关注,每天都有新收获! 学网络,就在IE-LAB 国内高端网络工程师培养基地 今晚0元学华为云计算HCIA课程! 快上车啦 今晚7:30--9:30 扫码火速报名 云计算是一种全新的商业模式 ...

  3. [WCF权限控制]利用WCF自定义授权模式提供当前Principal[实例篇]

    在<原理篇>中我们谈到:如果采用自定义安全主体权限模式,我们可以通过自定义AuthorizationPolicy或者ServiceAuthorizationManager实现对基于当前认证 ...

  4. [WCF权限控制]利用WCF自定义授权模式提供当前Principal[原理篇]

    在<通过扩展自行实现服务授权>一文中,我通过自定义CallContextInitializer的方式在操作方法之前之前根据认证用户设置了当前线程的安全主体,从而实现授权的目的.实际上,WC ...

  5. java中控制反转_Java如何利用IOC控制反转的三种设计模式详解

    这篇文章主要为大家详细介绍了Java使用IOC控制反转的三种设计模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 对于许多开发人员来说,控制反演(IoC)都是一个模糊的概念,因为他们在现实世界中 ...

  6. 流程控制中的三种结构

    流程控制中的三种结构分别为顺序.分支.循环三种结构. 一.顺序结构 二.分支结构 1.if双路条件结构 if (条件表达式) {语句序列1 } else {语句序列2 } 2.if单路条件结构 if ...

  7. hadoop离线阶段(第十三节)数据仓库、hive简介、hive安装和hive的三种交互模式

    目录 数据仓库 数据仓库的基本概念 数据仓库的主要特征 数据仓库与数据库区别 数据仓库分层架构 数据仓库元数据管理 Hive简介 什么是Hive Hive的特点 Hive架构 Hive与Hadoop的 ...

  8. 零基础学习SpringSecurity OAuth2 四种授权模式(理论+实战)(配套视频讲解)

    配套视频直达 背景 前段时间有同学私信我,让我讲下Oauth2授权模式,并且还强调是零基础的那种,我也不太理解这个零基础到底是什么程度,但是我觉得任何阶段的同学看完我这个视频,对OAuth2的理解将会 ...

  9. 【云计算学习教程】IaaS、PaaS和SaaS:云计算的三种服务模式(精讲)

    文章目录 云计算IaaS服务模式精讲 第一层(云管理器) 第二层(集群管理器) 第三层(计算机管理器) 云计算PaaS服务模式精讲 1)半平台 PaaS 2)全平台 PaaS 云计算SaaS服务模式精 ...

  10. Spring Security+Oauth2四种授权模式

    上一篇文章:Spring Security + OAuth2.0项目搭建:https://blog.csdn.net/qq_42402854/article/details/123057625 接着认 ...

最新文章

  1. poj 3662 Telephone Lines spfa算法灵活运用
  2. JS数组reduce()方法
  3. Dapper操作MySQL数据库获取JSON数据中文乱码
  4. 多重继承java_Java中的多重继承与组合vs继承
  5. android开发 文件分享到应用,Android 实现文件分享功能(共享多个文件)
  6. web前端基础(11html5和css)
  7. Python稳基修炼之计算机等级考试易错细节题3(含答案)
  8. 新一代天气雷达信息共享平台
  9. java查重精确算法_一个查重算法的多种实现思路
  10. 【STM32F429】第9章 ThreadX GUIX移植到STM32F429(IAR)
  11. html、css实现导航栏5种常用效果
  12. 蓦然认知全球发布会:用新的技术引擎为设备商和传统企业赋能丨Xtecher 观察
  13. 我的新书《Flutter 开发之旅从南到北》终于和大家见面了(抽奖送书啦)。
  14. 【路径规划】基于改进差分实现三维多无人机协同航迹规划matlab源码
  15. 【详细服务器配julia】
  16. Nazo前三十三关攻略
  17. javascript 基本用法
  18. 为什么打开CAD显示驱动该文件(.hdi)缺少或已损坏?
  19. 【运行报错】Centos 6 无法使用 yum
  20. 引力财经直播室Java 简介

热门文章

  1. 呼吸灯 裸机 S3C2416
  2. A simple Android example,including Intent/View/...
  3. Win XP局域网设置及其无法访问解决方案
  4. 回文数问题,两数互换位置问题(不用第三个变量)
  5. python 新建文件 hdfs_python使用hdfs3模块对hdfs进行操作详解
  6. HTML怎么写入形状,css3写各种形状(收集篇...)
  7. Spring在Web中的应用
  8. yaml和properties文件相互转换的网站
  9. tvpvar模型的建模步骤_这种思路讲解数据仓库建模,你见过吗?数据人与架构师必看...
  10. [渝粤教育] 中国地质大学 审计学 复习题 (2)