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