2

ASP.NETプロジェクトから古いVB6dll(ソースコードはありません)を呼び出そうとしています。dllはWindows認証を使用してサーバーに接続するため、現在のNETWORKSERVICEではなく、特定のユーザーとして関数を呼び出す必要があります。

これは、リモートユーザーになりすましているため、ロード時ではなく呼び出し時に決定することが望ましいです。これは、アプリケーションユーザーではなく、現在のNETWORKSERVICEではなく、関数を呼び出すユーザーになりたいためです。

したがって、ブラウザはUSERとして実行され、USERになりすましているアプリケーションに接続し、dllをUSERとして呼び出しますが、dllはUSERではなくNETWORKSERVICEとしてリモートサーバーに接続しようとしています。

このdllをUSERとしてリモートサーバーに接続することは可能ですか?または、他に何もない場合は、アプリケーションユーザーとして接続しますか?

編集:なりすましは、リモートユーザーの
を呼び出すことによってコードで行われます。私が働いている会社には習慣があるので、 (よりも少し深い)を取得する方法は奇妙ですが、以前はこの方法を使用して成功し、それ が正しいユーザーであることを確認しましたなりすまし。Impersonate()WindowsIdentitySecurityPrincipalSecurityIdentityWindowsIdentityUser.IdentitySystem.Security.Principal.WindowsIdentity.GetCurrent().Name

4

2 に答える 2

1

最初に、DLL が別のユーザーとしてどのように接続しているかを調べようとします (これにはProcess Explorerが役立ちます)。DLL が、NETWORKSERVICE としてログインしているボックスで実行されているサービス (ま​​たはその他のプロセス) と通信している可能性はありますか? その場合、そのサービスを別のユーザーとして実行するように変更できます。ストローをつかむだけで、理解していただければ幸いです。

于 2012-06-19T23:19:34.590 に答える
0

私は最終的に問題を見つけました(それは他の問題につながるだけですが、とにかく)AspCompat="true"私のページに がありませんでした。実際の問題は、「ページ」ではなく「ハンドラー」を使用していたことです。ハンドラーには、ページが持つ STA 機能がありません。アプリケーションが MTA で実行されており、COM コンポーネントは STA で実行する必要があるため、COM コンポーネントにアクセスしようとするたびに、スレッドの切り替え (偽装の喪失) が発生していました。

于 2012-08-14T19:10:56.673 に答える