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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Вероятно, лучший и самый чистый код, который я когда-либо видел, это:

var credentials = new UserCredentials(domain, username, password);
Impersonation.RunAsUser(credentials, logonType, () =>
{
    // do whatever you want as this user.
});

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

Ответ 3

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

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

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();

Ответ 4

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

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