C# 如何 windows 模拟分布式系统?
C# How to windows impersonate over distributed system?
我有分布式系统,其中我通过Windows 身份验证访问一些内部网络资源:
- User #345 request -> MyWebInterface -> SerializableQueue -> Worker #123
- Worker #123 access resource through WinAuth (currently under service account, not from user account).
- 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 本身只影响本地机器,因此是可管理的,但如果与委托结合使用,它可以用于访问具有与调用者相同权限的远程资源。你本质上是 运行 具有“域管理员”权限的服务,除非非常仔细地限制和计划。
我有分布式系统,其中我通过Windows 身份验证访问一些内部网络资源:
- User #345 request -> MyWebInterface -> SerializableQueue -> Worker #123
- Worker #123 access resource through WinAuth (currently under service account, not from user account).
- 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 本身只影响本地机器,因此是可管理的,但如果与委托结合使用,它可以用于访问具有与调用者相同权限的远程资源。你本质上是 运行 具有“域管理员”权限的服务,除非非常仔细地限制和计划。