C#如何通过Windows模拟分布式系统?

时间:2019-10-28 11:45:03

标签: c# windows impersonation sspi

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

  
      
  1. 用户#345请求-> MyWebInterface-> SerializableQueue->工作者#123
  2.   
  3. Worker#123通过WinAuth访问资源(当前在服务帐户下,而不是在用户帐户下)。
  4.   
  5. 用户#345响应<-MyWebInterface <-SerializableQueue <-工作者#123
  6.   

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

应该如何序列化用户凭据,然后在工作程序中对它们进行反序列化以完成WinAuth模拟?

1 个答案:

答案 0 :(得分:1)

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

我正在考虑这样一个场景:您有一个需要模拟的异步服务,而不是您无法控制的后端服务(例如,一个SMB共享或另一个需要Windows身份验证的服务)。如果您确实控制了后端服务,请考虑允许您的服务进行身份验证,然后“充当”真实的客户端。

因此,假设您需要真实的模拟,则有两个选择:S4UC2WTS。从本质上讲,这两种方法都是使用SeTcbPrivilege通过用户名为用户颁发令牌的方式(无需密码)。不错的tutorial of both technologies is available on MSDN

如果这不会立即引起警告,请注意,这将是非常安全的代码段。 SeTcbPrivilege本身仅影响本地计算机,因此是可管理的,但是如果与委托结合使用,它可以用于以与调用者相同的特权访问远程资源。基本上,您必须以“域管理员”权限运行服务,除非进行了非常仔细的约束和计划。