我有一个系统,我在其中使用带有简单委派的 Kerberos,使用集成的 Windows 身份验证将 AD 用户的凭据从网站转发到下游 HTTP REST 服务。所有服务器都是 Windows Server 2012 R2。
这很好用。
当我开始对运行后端 HTTP 服务的同一台服务器进行 Powershell 远程处理时,问题就出现了。 Enter-PSSession
向目标机器上的 WSMan 服务发出 Kerberos 身份验证请求。AD 看到这个请求,并使用我的自定义 HTTP 服务运行的身份加密请求的票证,WSMan 服务显然不能使用,远程处理失败。
我知道可以强制 IE 执行特定于端口的 SPN 请求(通过KB908209),但我无法让第二跳(即 IIS 代理请求)执行特定于端口的请求。我也无法让 powershell 在 5985 上为 WSMan 发出特定于端口的请求。
为了使事情更具体:
- 客户端浏览器向 ServerA 发出请求。浏览器向 AD 发出 HTTP/ServerA 的 Kerberos 票证请求,该请求被授予然后发送到 ServerA。
- ServerA 想要向 发出委托请求
http://ServerB:15200
。 - ServerA 向 AD 请求 SPN HTTP/ServerB 的 Kerberos 票证。它不会请求SPN HTTP/ServerB:15200。我想要它。
如果我将 SPN 设置为 HTTP/ServerB:15200,则 IIS 中的简单委派失败,但 powershell 远程处理有效。如果我将 SPN 设置为 HTTP/ServerB,则简单委派有效,但 powershell 远程处理失败。如果我将 SPN 设置为 HTTP/ServerB:5985,则没有任何效果。
在这一点上我完全被难住了——委托和每个端口的 SPN 似乎不能很好地协同工作?