利用Windows Group实现基于角色的WCF接口方法调用授权

本文介绍了如何利用Windows Group实现基于角色的WCF接口调用授权。通过配置WCF服务在IIS上使用Windows认证,并启用AspNetWindowsTokenRoleProvider,确保只有特定域用户组的成员可以访问接口。步骤包括在IIS中设置Windows认证和在web.config中配置RoleProvider。

在现实的场景中,WCF Service Contract公开的接口方法往往要求指定的用户群体才能访问,WCF框架提供了对于Role-Based授权支持, WCF支持AspNetWindowsTokenRoleProvider, SqlRoleProvider, AuthorizationStoreRoleProvider.

基于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;
  18. }

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值