Получение NetworkCredential для текущего пользователя (C#)

Я пытаюсь вызвать веб-сервис из консольного приложения, и мне нужно предоставить клиенту System.Net.NetworkCredential объект.
Можно ли создать NetworkCredential объект для пользователя, запустившего приложение без запроса имени пользователя / пароля?

3 ответа

Решение

Если вызываемая веб-служба использует встроенную безопасность Windows, создается NetworkCredential от текущего WindowsIdentity должно быть достаточно, чтобы позволить веб-службе использовать текущие пользовательские окна входа в систему. Однако, если веб-служба использует другую модель безопасности, нет никакого способа извлечь пароль пользователя из текущего удостоверения... что само по себе было бы небезопасно, позволяя вам, разработчику, украсть пароли ваших пользователей, Скорее всего, вам нужно будет предоставить своему пользователю какой-то способ предоставить свой пароль и сохранить его в каком-то безопасном кэше, если вы не хотите, чтобы он неоднократно предоставлял его.

Изменить: чтобы получить учетные данные для текущего удостоверения, используйте следующее:

Uri uri = new Uri("http://tempuri.org/");
ICredentials credentials = CredentialCache.DefaultCredentials;
NetworkCredential credential = credentials.GetCredential(uri, "Basic");

Вы можете получить имя пользователя с помощью ht tp://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.getcurrent.aspx, но нет способа получить текущий пароль пользователя!

Если вы используете HttpClient, вы можете использовать его следующим образом для аутентификации текущего пользователя:

      var httpClient = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
Другие вопросы по тегам