39

別のユーザーとして実行するようにコードを指示する方法はありますか?

PInvokeを介してNetUserSetInfoを呼び出していますが、別のユーザーとして呼び出す必要があります。それを行う方法はありますか?

4

3 に答える 3

30

なりすましには、いくつかのネイティブAPI(つまり、LogonUser)を呼び出す必要があるため、3ページのラッパーコードを投稿する価値はないでしょう。このページには完全な作業サンプルがあります:http://platinumdogs.wordpress.com/2008/10/30/net-c-impersonation-with-network-credentials/

なりすましには重要なセキュリティ上の考慮事項があることに注意してください。ベストプラクティスに必ず従ってください。

于 2009-07-22T22:17:35.373 に答える
30

おそらく私がこれまでに見た中で最高で最もクリーンなコードはこれです:

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

GithubまたはNugetに従ってください。

于 2015-05-26T18:48:40.200 に答える
11

この記事はそれをかなり簡潔に説明しています:

この記事のコードスニペットは次のとおりです。

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();
于 2009-07-22T22:13:52.263 に答える