在 .Net 中强制 URL 的特定 SPN
Posted
技术标签:
【中文标题】在 .Net 中强制 URL 的特定 SPN【英文标题】:Forcing specific SPN for URL in .Net 【发布时间】:2016-09-28 07:23:47 【问题描述】:在使用 .Net 框架(C# 和 Powershell)访问 Kerberized HTTP 服务时,我遇到了不一致的行为。它与我们的 DNS 配置以及我们使用 CNAMEs 而不是 Kerberized 服务的 A 记录有关。 Microsoft 建议的解决方法是确保您使用 A 记录作为主机名,但这在我的公司环境中不是一个选项。
我需要一个允许我为特定 URL 强制使用特定 SPN 的解决方案,确保我对 SPN 使用与 URL 相同的主机名。或者,强制使用一致的策略将 URL 解析为 SPN。
【问题讨论】:
【参考方案1】:与往常一样,一旦您知道要查找的内容,就很容易找到解决方案 ;-) 在此示例中,我在端口 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
。
参考资料:
https://msdn.microsoft.com/en-us/library/system.net.authenticationmanager.customtargetnamedictionary(v=vs.110).aspx【讨论】:
警告:.Net 4.5.1 似乎忽略了对 CustomTargetNameDictionary 的添加。 4.5 似乎工作正常。 我可能也看到了这个 - 你知道它是否会影响 4.5.1 之后的版本,或者他们是否记录了一个错误?以上是关于在 .Net 中强制 URL 的特定 SPN的主要内容,如果未能解决你的问题,请参考以下文章
强制 Shibboleth 在身份验证后重定向到特定 URL
如何强制 Testcontainers 使用特定的 docker 镜像?
如何在 node.js 中的特定持续时间后强制解决承诺? [复制]