我有一个Windows窗体应用程序(4.0),它调用Web服务(WCF)但需要模拟与当前登录到机器的用户不同的用户。怎么办?现在,Web服务无法返回记录,因为用户没有权限。我需要使用不同的用户进行Web服务调用。
答案 0 :(得分:4)
从我的应用程序中我这样做:
NetworkCredential credentials = new NetworkCredential(user, pw, userDomain);
// This is the client generated by the WCF Service Reference
AppClient appClient = new AppClient();
appClient.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;
appClient.ClientCredentials.Windows.ClientCredential = credentials;
appClient.MyWcfServiceCall();
现在,对WCF服务的调用将在提供的凭据下完成。必须修改您的WCF服务方法以允许模拟:
[OperationBehavior(Impersonation = ImpersonationOption.Allowed)]
或
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
取决于您的需求。
在WCF服务中,您有以下有关登录用户的信息:
OperationContext.Current.ServiceSecurityContext
Thread.CurrentPrincipal.IsInRole(roleName)
Thread.CurrentPrincipal.Identity
您还可以查看LogonUser()
其他假冒方法:http://msdn.microsoft.com/en-us/library/ff647404.aspx#paght000023_impersonatingusinglogonuser
HTH! 詹姆斯