我有分布式系统,可以通过Windows身份验证访问一些内部网络资源:
- 用户#345请求-> MyWebInterface-> SerializableQueue->工作者#123
- Worker#123通过WinAuth访问资源(当前在服务帐户下,而不是在用户帐户下)。
- 用户#345响应<-MyWebInterface <-SerializableQueue <-工作者#123
问题出在第2步中-我需要在用户#345下模拟,然后访问资源。这是使用此资源的安全要求。
应该如何序列化用户凭据,然后在工作程序中对它们进行反序列化以完成WinAuth模拟?
答案 0 :(得分:1)
模拟不是我所知道的任何排队系统的本机功能-特别是MSMQ不提供此功能。
我正在考虑这样一个场景:您有一个需要模拟的异步服务,而不是您无法控制的后端服务(例如,一个SMB共享或另一个需要Windows身份验证的服务)。如果您确实控制了后端服务,请考虑允许您的服务进行身份验证,然后“充当”真实的客户端。
因此,假设您需要真实的模拟,则有两个选择:S4U和C2WTS。从本质上讲,这两种方法都是使用SeTcbPrivilege通过用户名为用户颁发令牌的方式(无需密码)。不错的tutorial of both technologies is available on MSDN。
如果这不会立即引起警告,请注意,这将是非常安全的代码段。 SeTcbPrivilege本身仅影响本地计算机,因此是可管理的,但是如果与委托结合使用,它可以用于以与调用者相同的特权访问远程资源。基本上,您必须以“域管理员”权限运行服务,除非进行了非常仔细的约束和计划。