WCF接口方法如何進行正確調(diào)用
WCF開發(fā)插件一經(jīng)出現(xiàn)就立即受到了廣大開發(fā)人員的青睞。它獨特的功能優(yōu)勢令其在開發(fā)領(lǐng)域中占據(jù)著一定的地位。在現(xiàn)實的場景中,WCF接口方法往往要求指定的用戶群體才能訪問,WCF框架提供了對于Role-Based授權(quán)支持, WCF支持AspNetWindowsTokenRoleProvider, SqlRoleProvider, AuthorizationStoreRoleProvider.#t#
基于Windows Group的授權(quán)主要利用ASP.NET Role Provider中的AspNetWindowsTokeRoleProvider來實現(xiàn),要求WCF 通過IIS Host,并且用戶終端在Domain環(huán)境中.
實現(xiàn)步驟:
1. 配置WCF IIS Host使用Windows認證
可以在IIS Manager中直接設(shè)置WCF Application的認證方式,也可以通過web.config文件實現(xiàn)
- < 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配置中設(shè)置授權(quán)
- < behaviors>
- < serviceBehaviors>
- < behavior name="CalculatorServiceBehavior">
- < serviceMetadata httpsGetEnabled="True"/>
- < serviceDebug includeExceptionDetailInFaults="False" />
- < serviceAuthorization principalPermissionMode="UseWindowsGroups"
roleProviderName="AspNetWindowsTokenRoleProvider">- < /serviceAuthorization>
- < /behavior>
- < /serviceBehaviors>
- < /behaviors>
4. 在服務(wù)代碼中指定授權(quán)組
- //指定特定帳戶調(diào)用方法
- [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;
- }
- //指定特定業(yè)務(wù)組可以訪問的方法
- [PrincipalPermission(SecurityAction.Demand, Role = @"Resource Manager")]
- public string GetWindowsIdentity()
- {
- return System.Security.Principal.WindowsIdentity.GetCurrent().Name;
- }
通過上面四步,可實現(xiàn)對于WCF 方法調(diào)用授權(quán)控制,這個場景并非通用,對于局域網(wǎng)應(yīng)用來講,是個不錯的選擇,用戶也可以自己實現(xiàn)Customer Role Provider從而利用SQL或XML方式實現(xiàn)授權(quán)。
對于非windows認證的用戶,可以利用SqlRoleProvider來實現(xiàn)授權(quán),結(jié)合Sql Membership也可以進行身份驗證。我個人很喜歡AuthorizationStoreRoleProvider, 結(jié)合ADAM的強大功能,可以完美解決權(quán)限管理問題。