1

我有一个配置了 Windows 身份验证的自定义 WCF Web 服务和一个需要调用前者的 WPF 客户端应用程序。该服务检查用户名并从数据库中提取一些特定数据。所以我必须使用运行应用程序的用户的凭据来调用服务。

问题是我的服务托管在另一个具有 Windows 身份验证的站点下,用户可以在那里使用另一个帐户进行身份验证。Windows(或 IE?)缓存上次使用的帐户,然后我的客户端应用程序也使用它!

例子:

我在“MYDOMAIN\AdminUser”下进入网站

我运行以下代码(来自客户端应用程序,它不是网络代码)

var client = new TestServiceClient();
var currentUser = WindowsIdentity.GetCurrent(); // just informative field nothing more, i don't use it anyhow
// currentUser.Name = "MYDOMAIN\\MyUserName" - it's current value, i'm not trying to set it
client.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
var data = client.GetTestData();

服务被“MYDOMAIN\AdminUser”调用..

我知道我可以使用名称和密码创建 NetworkCredential 但我必须将它存储在某个地方,对其进行加密等等..

为了澄清这个问题:在一个帐户下运行的客户端进程自己调用另一个帐户下的服务,只是因为 Windows 在后台为调用提供了另一个凭据。

4

0 回答 0