Я пытаюсь вызвать веб-сервис из консольного приложения, и мне нужно предоставить клиенту объект System.Net.NetworkCredential
.
Возможно ли создать объект NetworkCredential
для пользователя, который запустил приложение, не запрашивая имя пользователя/пароль?
Получение NetworkCredential для текущего пользователя (С#)
Ответ 1
Если вызываемая веб-служба использует встроенную защиту для Windows, создание NetworkCredential
из текущего WindowsIdentity
должно быть достаточным, чтобы веб-служба могла использовать текущий вход в Windows. Однако, если веб-служба использует другую модель безопасности, нет никакого способа извлечь пароль пользователя из текущей идентификации... которая сама по себе будет небезопасной, что позволит вам, разработчику, украсть ваши пароли пользователей, Вероятно, вам нужно предоставить какой-то способ для вашего пользователя предоставить свой пароль и сохранить его в каком-то защищенном кеше, если вы не хотите, чтобы они неоднократно предоставляли его.
Изменить: Чтобы получить учетные данные для текущего идентификатора, используйте следующее:
Uri uri = new Uri("http://tempuri.org/");
ICredentials credentials = CredentialCache.DefaultCredentials;
NetworkCredential credential = credentials.GetCredential(uri, "Basic");
Ответ 2
Вы можете получить имя пользователя, используя System.Security.Principal.WindowsIdentity.GetCurrent(), но нет способа получить текущего пользователя пароль!