【发布时间】:2018-01-09 01:00:49
【问题描述】:
我正在尝试通过 Windows Integrated Auth 为 WebApi 服务的内部套件实施 Kerberos。在此过程中,我学到了很多东西,并了解 SPN 在 Kerberos 上的重要性。
我面临的困难是我们有多个服务(最多 30 个),每个服务都有自己的服务帐户。它们托管在不同的子目录中,而不是作为子域。例如:
server.domain.com/reference.api
server.domain.com/client.api
似乎 SPN 与我的方案不兼容(默认情况下)。 SPN 必须针对服务器 (server.domain.com) 的 netbios 和 FQDN 进行注册,并且每个主机只能注册一个帐户。
我有什么选择?
我能想到的几种可能性是:
- 使用自定义服务类(即不是 HTTP),所以我会像这样注册一个 spn:
setspn -s referenceapi/server.domain.com 域/reference_api_user
- 在注册 spn 时使用可选的“服务名称”或专有名称 (https://msdn.microsoft.com/en-us/library/ms677601(v=VS.85).aspx)
这两种可能性的第一阶段是注册 SPN,这将是相当简单的,但我不确定我们需要在客户端做什么。由于这些服务都是内部的,我们可以完全控制每个客户。我们目前正在使用 HttpClient。
有什么建议吗?有没有人遇到过类似的问题?我不敢相信我是第一个尝试跨多个服务和帐户实施 Kerberos 的人,其中每个服务都是默认网站的子目录。
【问题讨论】:
-
我不确定我是否完全理解为什么您的问题是一个障碍,但是我在类似(我认为)场景中使用的一个可能的解决方案是配置一个反向代理。您可以将每个“子目录”设置为自己的站点,将代理反向到原始位置。例如,
reference.company.com反向代理到server.company.com/reference。我可能没有完全理解这个问题,但我认为您的问题可以从网络服务器层解决,例如使用 IIS。
标签: c# windows authentication asp.net-web-api kerberos