WCF接口方法如何进行正确调用
创始人
2024-06-23 19:31:43
0

WCF开发插件一经出现就立即受到了广大开发人员的青睐。它独特的功能优势令其在开发领域中占据着一定的地位。在现实的场景中,WCF接口方法往往要求指定的用户群体才能访问,WCF框架提供了对于Role-Based授权支持, WCF支持AspNetWindowsTokenRoleProvider, SqlRoleProvider, AuthorizationStoreRoleProvider.#t#

基于Windows Group的授权主要利用ASP.NET Role Provider中的AspNetWindowsTokeRoleProvider来实现,要求WCF 通过IIS Host,并且用户终端在Domain环境中.

实现步骤:

1. 配置WCF IIS Host使用Windows认证

可以在IIS Manager中直接设置WCF Application的认证方式,也可以通过web.config文件实现

  1. < system.web>   
  2. < authentication mode="Windows"/>   
  3. < /system.web> 

2. 在web.config文件中启用RoleProvider

  1. < roleManager enabled="true" defaultProvider=
    "AspNetWindowsTokenRoleProvider"/> 

与其它的Role Provider不同,WindowsTokeRoleProvider不需要单独声明,可以直接使用, 例如下面基于ADAM的Provider,则需要额外声明.

 

  1. < roleManager enabled="true" defaultProvider="RoleManagerAzManADAMProvider"   
  2. cacheRolesInCookie="false">   
  3. < providers>   
  4. < add name="RoleManagerAzManADAMProvider" 
    type="System.Web.Security.AuthorizationStoreRoleProvider, 
    System.Web, Version=2.0.0.0, Culture=neutral, publicKeyToken=b03f5f7f11d50a3a"
     connectionStringName="ADAMConnection" applicationName="yourApp"/>   
  5. < /providers>   
  6. < /roleManager> 

3. 在Service Behaviors配置中设置授权

  1. < behaviors>   
  2. < serviceBehaviors>   
  3. < behavior name="CalculatorServiceBehavior">   
  4. < serviceMetadata httpsGetEnabled="True"/>   
  5. < serviceDebug includeExceptionDetailInFaults="False" />   
  6. < serviceAuthorization principalPermissionMode="UseWindowsGroups" 
    roleProviderName="AspNetWindowsTokenRoleProvider">   
  7. < /serviceAuthorization>   
  8. < /behavior>   
  9. < /serviceBehaviors>   
  10. < /behaviors> 

4. 在服务代码中指定授权组

 

  1. //指定特定帐户调用方法   
  2. [PrincipalPermission(SecurityAction.Demand, Name = @"domain\michael")]   
  3. public string GetCaller()   
  4. {   
  5. return OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name;   
  6. }   
  7. //指定管理员帐户才能访问的方法   
  8. [PrincipalPermission(SecurityAction.Demand, Role = @"Administrators")]   
  9. public string GetThreadIdentity()   
  10. {   
  11. return System.Threading.Thread.CurrentPrincipal.Identity.Name;   
  12. }   
  13. //指定特定业务组可以访问的方法   
  14. [PrincipalPermission(SecurityAction.Demand, Role = @"Resource Manager")]   
  15. public string GetWindowsIdentity()   
  16. {   
  17. return System.Security.Principal.WindowsIdentity.GetCurrent().Name;   

 

通过上面四步,可实现对于WCF 方法调用授权控制,这个场景并非通用,对于局域网应用来讲,是个不错的选择,用户也可以自己实现Customer Role Provider从而利用SQL或XML方式实现授权。

对于非windows认证的用户,可以利用SqlRoleProvider来实现授权,结合Sql Membership也可以进行身份验证。我个人很喜欢AuthorizationStoreRoleProvider, 结合ADAM的强大功能,可以完美解决权限管理问题。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...