我正在尝试使用最新的 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 票证?
更新:
如果前端服务和用户在同一个林中,而后端服务在不同的林中,则此设置可以正常工作。
当前端服务和后端服务在一个林中并且用户在不同的林中时,它也可以工作。