WCF接口方法如何進行正確調用
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文件實現
- < 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的強大功能,可以完美解決權限管理問題。