以不同的用户身份运行代码

时间:2009-07-22 22:07:11

标签: c# impersonation windows-authentication

有没有办法让我的代码以不同的用户身份运行?

我通过PInvoke调用NetUserSetInfo,我需要将其作为不同的用户调用。有没有办法做到这一点?

4 个答案:

答案 0 :(得分:27)

模拟需要调用一些本机API(即LogonUser),因此可能不值得发布3页的包装器代码。此页面包含完整的工作示例:http://platinumdogs.wordpress.com/2008/10/30/net-c-impersonation-with-network-credentials/

请注意,假冒具有重要的安全性考虑因素。确保遵循最佳做法。

答案 1 :(得分:26)

到目前为止,我见过的最好和最干净的code可能就是这个

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

只需关注GithubNuget

答案 2 :(得分:11)

article非常简洁地解释了这一点:

以下是文章中的代码段:

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

答案 3 :(得分:0)

是模拟确实有助于以不同的用户身份运行某些代码。它在我的情况下工作正常。 (感谢MilanMatějka)

我还找到了一个Ref链接。希望它能帮助您轻松获得nuget的包裹: http://iamfixed.blogspot.de/2017/11/run-code-as-different-user-in-c-from.html