使用特定的Windows标识模拟WCF客户端

时间:2016-10-28 11:32:42

标签: wcf impersonation

通过custom auth logic我已经有WindowsIdentity的实例。 现在我想调用WCF服务并传递标识:

WindowsIdentity id = ... // get from session etc.
using (id.Impersonate())
{
   var proxy = ... // create or access
   proxy.DoSomething();             
}

以上代码正常。但它的缺点是你需要在模拟范围中包装每个调用(它容易被遗忘,因此容易出错,对于现有的应用程序,需要更改许多代码)。

我还找到了传递凭证的替代方法:

var client = new SomeClient(new InstanceContext(callback), GetEndpointName());
client.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential(cached.User, cached.Password);

这样做的优点是可以在中央工厂方法中进行设置,并将更改最小化到现有代码库。我的应用程序具有缓存的凭据并且可以执行此操作,但是因为我已经有一个WindowsIdentity实例,所以我认为不需要它。另外我不确定选项二的性能是否较慢,因为username / pwd需要额外的解析。

选项二是好的还是有任何缺点? 或者是否有第三个选项允许在创建WCF代理时传递WindowsIdentity?

0 个答案:

没有答案