C# 如何 windows 模拟分布式系统?

C# How to windows impersonate over distributed system?

我有分布式系统,其中我通过Windows 身份验证访问一些内部网络资源:

  1. User #345 request -> MyWebInterface -> SerializableQueue -> Worker #123
  2. Worker #123 access resource through WinAuth (currently under service account, not from user account).
  3. User #345 response <- MyWebInterface <- SerializableQueue <- Worker #123

问题出在第 2 步 - 我需要模拟用户 #345,然后访问资源。这是使用此资源的安全要求。

应该如何序列化用户凭据,然后在 worker 上反序列化它们以完成 WinAuth 模拟?

模拟不是我所知道的任何排队系统的本机功能 - 特别是 MSMQ 不提供此功能。

我假设您有一个异步服务需要模拟您无法控制的后端服务(例如 SMB 共享或其他需要 windows 身份验证的服务)。如果您确实控制后端服务,请考虑让您的服务以其自身身份进行身份验证,然后“充当”真正的客户端。

因此,假设您需要真实的模拟,您有两个选择:S4U and C2WTS. Both are essentially ways to use SeTcbPrivilege to issue tokens for users by username (no password required). A good tutorial of both technologies is available on MSDN

如果这没有立即触发警钟,应该注意这将是一段非常安全的关键代码。 SeTcbPrivilege 本身只影响本地机器,因此是可管理的,但如果与委托结合使用,它可以用于访问具有与调用者相同权限的远程资源。你本质上是 运行 具有“域管理员”权限的服务,除非非常仔细地限制和计划。