web-dev-qa-db-ja.com

別のユーザーとしてコードを実行する

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

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

34
Vaccano

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

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

27
Richard Berg

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

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

Github または Nuget に従うだけです。

26
Milan Matějka

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

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

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