0

c#服务如何获取调用它的终端服务器用户的身份(登录名)?

我编写了 ac# 服务来监听 http 请求并返回当前登录用户。该请求由在浏览器中运行的 javascript 初始化。到目前为止效果很好,但它不适用于可以同时连接多个用户的终端服务器。我目前正在做的是查询“explorer”的processId,然后使用“GetOwner”来获取用户登录名。

服务有没有办法识别为其生成 http 请求的用户?我可以以某种方式获取 http 会话并识别拥有它的用户吗?我需要返回用户身份作为响应。

谢谢,JJ

4

1 回答 1

0

您需要获取 HTTP 请求在客户端使用的端口,将其与机器上的活动出站 TCP 连接列表进行匹配,并识别浏览器的进程 ID(例如通过GetExtendedTcpTable)。从那里您可以获取进程的会话 ID(例如通过使用Process.SessionId),然后查找与会话关联的用户名(例如通过使用WTSQuerySessionInformationCassia)。或者,您可以调用 OpenProcess 和 GetSecurityInfo 从进程 ID 中获取用户的 SID,如本答案所述。后一种方法可能更好,因为在单个会话中可能有进程作为不同的用户运行(例如,使用运行方式)。

不过,这一切似乎都是一种真正的痛苦。你不能只在浏览器中使用 Windows 身份验证吗?

于 2013-01-18T17:59:36.940 回答