我正面临一些冒充问题。
用户(username = myLogin)必须在服务器(server_A)上调用WCF服务(WebService_A)。此服务将在服务器(server_B)上调用另一个WCF服务(WebService_B)。
我希望WebService_B获取初始调用者的身份(“myLogin”)。
代码如下:
客户:
var proxyA = new WebService_A();
var result = proxyA.GetDataFromA();
网络服务A:
public IEnumerable<string> GetDataFromA()
{
var winIdentity = OperationContext.Current.ServiceSecurityContext.WindowsIdentity;
using (winIdentity.Impersonate())
{
using (var channelFactory = new ChannelFactory<IWebServiceA>("WebService_A"))
{
var proxy = channelFactory.CreateChannel();
var resut = proxy.GetDataFromB().ToList();
};
}
}
我试过这个,结果相同
public IEnumerable<string> GetDataFromA()
{
using (var proxy = new WebService_A("*"))
{
proxy.ChannelFactory.Credential.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonate;
var resut = proxy.GetDataFromB().ToList();
};
}
网络服务B:
public IEnumerable<string> GetDataFromB()
{
using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
{
return WindowsIdentity.GetCurrent().Name;
}
}
调用GetDataFromB()
后,我得到FileLoadException
(the file or assembly System.IdentityModel.Selectors is not found
)