4

我正在尝试使用最新的 JDK 8 来执行基于资源的约束委派,并且似乎遇到了获取 S4U2Proxy 调用最后一站的服务票证的问题。

这是我的设置:两个启用了两种林身份验证的 Microsoft AD 林。

  • 森林A:forestA.com
  • 森林B:forestB.com
  • 前端服务位于 ForestA 中,SPN 为 http/myappserver.forestA.com
  • ForestB 中的后端服务,SPN 为 http/backend.forestB.com
  • 被模拟的用户在 ForestB 中,用户名为 userB。

我已经成功地使用了 S4U2Self 协议,并为用户 B 检索到 ForestA 中的前端服务的服务票证。但是,当尝试使用 S4U2Proxy 获取 ForestB 中后端服务的服务票证时,请求失败,错误代码为 kerberos 错误 12。

在调查 ForestB 域控制器上事件查看器的审核日志后,它表明错误消息是 0xC000019B(事件 ID 4769),这似乎与一些通用的信任设置问题有关。

任何具有相同有效负载的进一步请求都会导致从 ForestB 的域控制器返回的 Kerberos 错误代码 28。可能是由于之前缓存了 kerberos 票证?

更新:

如果前端服务和用户在同一个林中,而后端服务在不同的林中,则此设置可以正常工作。

当前端服务和后端服务在一个林中并且用户在不同的林中时,它也可以工作。

4

1 回答 1

1

在与 Microsoft 讨论此事后,确认 Microsoft AD 在设计上不支持此特定案例。具体来说,如果前端服务位于一个林中,而用户和资源服务位于不同的林中,则不支持此用例。

希望这对将来遇到此问题的人有所帮助。

于 2020-10-23T16:48:29.860 回答