【发布时间】:2014-10-23 16:47:51
【问题描述】:
我目前正在使用 .NET 远程处理 (C#) 将文件从客户端应用程序复制到服务器应用程序(然后对其进行一些处理)。我可以验证哪个用户帐户连接到服务器并发送文件,但想知道是否有一种方法也可以验证客户端应用程序正在运行的计算机(换句话说,对于这个特定项目,我们同样关心 WHICH COMPUTER 数据是从谁发送来的)。
IAuthorizeRemotingConnection 似乎只为计算机提供了一个 IPEndPoint,因为它只是一个 IP 地址,因此对于验证它并没有真正的帮助。
(我还要提一下,这个程序保证只能在域环境中运行。)
欢迎提出建议!谢谢!
编辑:为澄清起见,我们验证计算机帐户的最终目的是验证它是否是活动目录中特定安全组的成员。我们希望我们的服务器拒绝数据,除非它是从该组中定义的其中一台计算机发送的(尽管任何用户都可以通过这些计算机发送它)。
【问题讨论】:
-
如果所有计算机都在同一个 Windows 域中,您应该能够使用 SID。 msdn.microsoft.com/en-us/library/windows/desktop/…
-
我认为如果调用被认证为用户账户,它不会被认证为机器账户。当调用进程作为 NETWORK SERVICE 或 LOCAL SYSTEM 运行时,将使用计算机帐户。它不能同时作为计算机和用户进行身份验证。我可能是错的,但我一直认为它是这样工作的......
-
如果您将 WCF 与 WS-Trust 一起使用,我认为您可以获得一个安全令牌,其中包含计算机帐户和用户帐户的令牌,方法是使用“ActAs”将一个令牌嵌入另一个令牌中并在客户端机器上使用作为 NETWORK SERVICE 运行的服务,我从未使用过 .Net 远程处理,但我猜它不支持这种行为。
-
另外,如果您有权访问诸如 Active Directory 证书服务之类的公钥基础结构,也许您可以使用证书对计算机进行身份验证。例如,使用计算机证书私钥对请求进行签名。您必须确保客户端上的用户无权访问计算机证书(例如,不是本地管理员)
标签: .net authentication active-directory windows-authentication remoting