Вызовите веб-сервис под текущими учетными данными пользователя - PullRequest
1 голос
/ 01 марта 2011

У меня есть пользовательский веб-сервис WCF, настроенный с аутентификацией Windows, и клиентское приложение 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 предоставляет вызов с другими учетными данными под капотом.

...