在 .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 中的特定持续时间后强制解决承诺? [复制]

如何从 C# .NET 强制解除分配 COM 服务器对象

.NET 和 Azure Blob 存储 - 对同名图像强制缓存失效

SwiftUI TextField 强制小写