Получение 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 });