Подтвердить что ты не робот

Как вы получаете учетные данные (NetworkCredential) текущего пользователя?

Я пишу код для использования стороннего компонента, и мне нужно предоставить объект, который реализует ICredentials, когда я начну использовать его.

Если я напишу следующее...

var credential = new NetworkCredential("MyUsername", "MyPassword");

... и передать "учетные данные", это нормально. Но я хотел бы передать учетные данные текущего пользователя (это служба Windows, поэтому работает как указанный пользователь).

Я пробовал оба из следующих, но ни один из них не работает (или ничего не возвращает):

NetworkCredential credential = System.Net.CredentialCache.DefaultCredentials;
NetworkCredential credential = CredentialCache.DefaultNetworkCredentials;

Может ли кто-нибудь предложить, как получить объект approriate, который представляет учетные данные имени пользователя, в котором работает служба?

Спасибо, Росс

4b9b3361

Ответ 2

Вам нужно сделать олицетворение, например:

    System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext = 
    ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();

//Insert your code that runs under the security context of the authenticating user here.

impersonationContext.Undo();

http://support.microsoft.com/kb/306158

Или вы можете использовать web.config:

<identity impersonate="true" />

Ответ 3

Идеальная ситуация безопасности заключается в том, что пароль зарегистрированного пользователя не хранится нигде в памяти. Он не хранится нигде на диске. Он существует только как хэш-значение для сравнения с строкой, введенной человеком. Хранение пароля в явном виде по своей сути является угрозой безопасности, и его следует избегать, когда это возможно.

Учитывая этот принцип, нет НИКАКОЙ части операционной системы, даже если у вас есть пароль пользователя в ясном виде, а тем более он готов предоставить его вам.

Ответ 4

К сожалению, вам нужно взаимодействовать с WMI следующим образом:

http://www.codeproject.com/Articles/28161/Using-WMI-to-manipulate-services-Install-Uninstall

Значение, которое вы ищете для запроса, - это StartName, которое будет оцениваться как "NT Authority\NetworkService" (или что вы используете). Если вы перепутаете вторую часть этой статьи с первой частью ее получения, она должна быть довольно простой.

Ответ 5

Вы пытались установить основную политику для appdomain в начале приложения?

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

Установив это значение перед обращением к текущему основному объекту через поток, убедитесь, что в этом объекте используется идентификатор Windows.

edit - Я уверен, что это работает для DefaultNetworkCredentials. Я использовал его для доступа к веб-службе с проверкой подлинности Windows из приложения форм Windows.

Ответ 6

если вы просто хотите запустить процесс, поскольку текущий пользователь добавляет глагол:  "runas " & Environment.UserName

Если вы хотите запустить процесс, так как администратор просто написал "runas"

в vb.net

Dim ps As New System.Diagnostics.ProcessStartInfo("filepath", "arguments")

ps.Verb = "runas" 'run as admin

'ps.Verb = "runas " & Environment.UserName'run as current user, by default

Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(ps)

если вы хотите получить текущий пароль пользователя, вы не можете, на самом деле это небезопасная практика. Какое право и с какой целью ваш сервис должен получить секретный пароль для Windows? например, как дать PIN-код вашего телефона whatsapp