0

c#サービスは、それを呼び出すターミナルサーバーユーザーのID(ログオン名)をどのように取得できますか?

httpリクエストをリッスンして現在のログオンユーザーを返すac#サービスを作成しました。リクエストは、ブラウザで実行されるjavascriptによって初期化されます。これまではうまくいきましたが、同時に接続している複数のユーザーがいる可能性のあるターミナルサーバーでは機能しません。私が現在行っているのは、「explorer」のprocessIdを照会し、「GetOwner」を使用してユーザーのログオン名を取得することです。

サービスがhttpリクエストを生成したユーザーを識別する方法はありますか?どういうわけかhttpセッションを取得して、それを所有しているユーザーを特定できますか?応答としてユーザーIDを返す必要があります。

ありがとう、JJ

4

1 に答える 1

0

HTTP 要求がクライアント側で使用しているポートを取得し、それをマシン上のアクティブなアウトバウンド TCP 接続のリストと照合し、ブラウザーのプロセス ID を特定する必要があります (たとえば、GetExtendedTcpTableを介して)。そこからプロセスのセッション ID を取得し (例: Process.SessionIdを使用)、セッションに関連付けられたユーザー名を検索できます (例: WTSQuerySessionInformationまたはCassiaを使用)。または、 OpenProcess と GetSecurityInfo を呼び出して、この回答で説明されているように、プロセス ID からユーザーの SID を取得することもできます。1 つのセッションで別のユーザーとして実行されているプロセスが存在する可能性があるため (たとえば、Run As を使用)、この後者のアプローチがおそらく優れています。

しかし、それはすべて本当の痛みのようです。ブラウザで Windows 認証をそのまま使用できませんでしたか?

于 2013-01-18T17:59:36.940 に答える