Запуск кода от имени другого пользователя


Есть ли способ заставить мой код работать от имени другого пользователя?

Я вызываю NetUserSetInfo через PInvoke, и мне нужно вызвать его как другого пользователя. Есть ли способ сделать это?

4 32

4 ответа:

Олицетворение требует вызова некоторых собственных API (а именно LogonUser), поэтому, вероятно, не стоит публиковать 3 страницы кода оболочки. На этой странице приведен полный рабочий пример: http://platinumdogs.wordpress.com/2008/10/30/net-c-impersonation-with-network-credentials/

Обратите внимание, что олицетворение имеет важные соображения безопасности. Убедитесь, что вы следуете рекомендациям.

Вероятно, самый лучший и самый чистый код, который я видел до сих пор, это

using (Impersonation.LogonUser(domain, username, password, logonType))
{
    // do whatever you want as this user.
}

Просто следуйте Github или Nuget.

Эта Статья объясняет это довольно кратко:

Вот фрагмент кода из статьи:

IntPtr accessToken = IntPtr.Zero;
....
//You have to initialize your accessToken with API calling 
....
WindowsIdentity identity = new WindowsIdentity(accessToken);
WindowsImpersonationContext context = identity.Impersonate();
...
// Now your code is using the new WindowsLogin and you can do what ever this login can do
...

//Now you can return to your current login of Windows
context.Undo();

Да олицетворение действительно помогает запускать некоторый код от имени другого пользователя. В моем случае это работает нормально. (Спасибо Милану Матейке)

Я также нашел ссылку Ref. Надеюсь, это поможет вам легко получить пакет от nuget : http://iamfixed.blogspot.de/2017/11/run-code-as-different-user-in-c-from.html