我们有一个稍微复杂的 IDAM 设置:
即最终用户的机器和浏览器与父 AD 位于一个网络中,而我们基于 Jetty 的应用程序和它可以与之对话的 AD(本地 AD)位于另一个网络中。
两个 AD 之间存在双向信任。父网络中的浏览器在受信任站点中具有本地域。
Jetty 服务器的设置如下:
- 它使用针对本地 AD 中的主体生成的 keytab 文件
- 它在本地 AD 中定义的用户下作为 Windows 服务运行
- 域、域-域映射和 kdc 是针对本地 AD 的域定义的
- 它使用 spnego - isInitiator 设置为 false;doNotPrompt 为真;storeKey 为真
问题是:
- 作为测试,从本地网络内的浏览器访问服务器(即链接到本地 AD)有效- Kerberos 调试信息出现在日志中,我可以在 HTTP 流量中看到正确的 Kerberos 协商,并且用户自动登录. 杰出的。
但是,从父网络中的浏览器访问服务器(这是我们的用户将如何做的事情)不起作用!浏览器返回 401 unauth,但随后提示输入凭据,输入时会出现空白屏幕。然后单击地址栏并按 Enter 会执行以下两项操作之一,具体取决于凭据是用于远程 AD 还是本地 AD:
- 本地 AD 凭据然后登录正常,在日志中从头开始使用 Kerberos(GET 请求、401 unauth 响应、Kerberos 标头请求等)
- 远程 AD 凭据未登录(GET 请求,401 unauth 响应,看起来像 NTLM 标头
Authorization: Negotiate <60 or so random chars>
:)
无论哪种方式,它提示的事实都是错误的!
这些症状有解释吗?我们的设置可以做我们想要的吗?
至于上面的描述可能是错误的:我提到的关于 Jetty 服务器的任何配置都应该是准确的,就像我所做的那样。我很乐意提供更多细节。任何关于 AD 或父网络浏览器的配置都可能是可疑的,因为它不在我的控制之下,而且我已经向我报告了配置,而不是亲自看到它。