2009-06-04 5 views
34

Я пытаюсь вызвать веб-сервис из консольного приложения, и мне нужно предоставить клиенту объект System.Net.NetworkCredential.
Возможно ли создать объект NetworkCredential для пользователя, который запустил приложение, не запрашивая имя пользователя/пароль?Получение NetworkCredential для текущего пользователя (C#)

ответ

43

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

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

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

Как создать NetworkCredential из WindowsIdentity? –

+12

Спасибо! Я просто использовал CredentialCache.DefaultNetworkCredentials. –

+1

Метод GetCredential возвращает учетные данные из сохраненных имен пользователей и паролей в Windows XP/2003/Vista/2008? Я задал соответствующий вопрос здесь: http://stackoverflow.com/questions/994232/how-to-call-a-web-service-using-stored-credentials Если GetCredential извлекает учетные данные из магазина на основе uri & тип аутентификации, я отвечу. Я проверю это и отправлю отчет ... –

4

Вы можете получить имя пользователя, используя System.Security.Principal.WindowsIdentity.GetCurrent(), но нет способа получить текущий пароль пользователя!

+7

Я надеюсь, что нет никакого способа получения текущего пароля! :) Что я хотел бы сделать, так это использовать «текущие учетные данные» по умолчанию для веб-службы. –

Смежные вопросы