您的位置:首页 > 其它

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

2008-08-21 22:36 676 查看
在现实的场景中,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文件实现

<system.web>

<authentication mode="Windows"/>

</system.web>

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

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

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

<roleManager enabled="true" defaultProvider="RoleManagerAzManADAMProvider"

cacheRolesInCookie="false">

<providers>

<add name="RoleManagerAzManADAMProvider" type="System.Web.Security.AuthorizationStoreRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, publicKeyToken=b03f5f7f11d50a3a" connectionStringName="ADAMConnection" applicationName="yourApp"/>

</providers>

</roleManager>

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

<behaviors>

<serviceBehaviors>

<behavior name="CalculatorServiceBehavior">

<serviceMetadata httpsGetEnabled="True"/>

<serviceDebug includeExceptionDetailInFaults="False" />

<serviceAuthorization principalPermissionMode="UseWindowsGroups" roleProviderName="AspNetWindowsTokenRoleProvider">

</serviceAuthorization>

</behavior>

</serviceBehaviors>

</behaviors>

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

//指定特定帐户调用方法

[PrincipalPermission(SecurityAction.Demand, Name = @"domain/michael")]

public string GetCaller()

{

return OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name;

}

//指定管理员帐户才能访问的方法

[PrincipalPermission(SecurityAction.Demand, Role = @"Administrators")]

public string GetThreadIdentity()

{

return System.Threading.Thread.CurrentPrincipal.Identity.Name;

}

//指定特定业务组可以访问的方法

[PrincipalPermission(SecurityAction.Demand, Role = @"Resource Manager")]

public string GetWindowsIdentity()

{

return System.Security.Principal.WindowsIdentity.GetCurrent().Name;

}

通过上面四步,可实现对于WCF 方法调用授权控制,这个场景并非通用,对于局域网应用来讲,是个不错的选择,用户也可以自己实现Customer Role Provider从而利用SQL或XML方式实现授权。
对于非windows认证的用户,可以利用SqlRoleProvider来实现授权,结合Sql Membership也可以进行身份验证。我个人很喜欢AuthorizationStoreRoleProvider, 结合ADAM的强大功能,可以完美解决权限管理问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐