在 .Net 中强制 URL 的特定 SPN
Forcing specific SPN for URL in .Net
我在使用 .Net 框架(C# 和 Powershell)访问 Kerberized HTTP 服务时遇到了不一致的行为。它与我们的 DNS 配置以及我们使用 CNAME 而不是 Kerberized 服务的 A 记录有关。 Microsoft 建议的解决方法是确保您对主机名使用 A 记录,但这在我的公司环境中不是一个选项。
我需要一个允许我为特定 URL 强制使用特定 SPN 的解决方案,确保我为 SPN 使用与 URL 相同的主机名。或者,强制执行一致的策略以将 URL 解析为 SPN 的选项。
一如既往,一旦您知道自己在寻找什么,就很容易找到解决方案 ;-) 在此示例中,我在端口 8080 上使用 HTTPS Web 服务:
C#:
System.Net.AuthenticationManager.CustomTargetNameDictionary
.Add("https://my-service.tld:8080/", "HTTP/my-service.tld");
Powershell:
[System.Net.AuthenticationManager]::CustomTargetNameDictionary.
Add("https://my-service.tld:8080/", "HTTP/my-service.tld")
不要忘记结尾的斜线。如果使用端口 80,请删除 :8080
。
参考文献:
我在使用 .Net 框架(C# 和 Powershell)访问 Kerberized HTTP 服务时遇到了不一致的行为。它与我们的 DNS 配置以及我们使用 CNAME 而不是 Kerberized 服务的 A 记录有关。 Microsoft 建议的解决方法是确保您对主机名使用 A 记录,但这在我的公司环境中不是一个选项。
我需要一个允许我为特定 URL 强制使用特定 SPN 的解决方案,确保我为 SPN 使用与 URL 相同的主机名。或者,强制执行一致的策略以将 URL 解析为 SPN 的选项。
一如既往,一旦您知道自己在寻找什么,就很容易找到解决方案 ;-) 在此示例中,我在端口 8080 上使用 HTTPS Web 服务:
C#:
System.Net.AuthenticationManager.CustomTargetNameDictionary
.Add("https://my-service.tld:8080/", "HTTP/my-service.tld");
Powershell:
[System.Net.AuthenticationManager]::CustomTargetNameDictionary.
Add("https://my-service.tld:8080/", "HTTP/my-service.tld")
不要忘记结尾的斜线。如果使用端口 80,请删除 :8080
。
参考文献: