我们有一个稍微复杂的IDAM设置:
也就是说,最终用户的机器和浏览器与父AD位于同一个networking中,我们基于Jetty的应用程序和可以与之通话的AD(本地AD)位于另一个networking中。
两个AD之间有双向的信任。 父networking中的浏览器在受信任的站点中具有本地域。
Jetty服务器的设置如下:
问题是:
然而 ,从父networking中的浏览器访问服务器(这是我们的用户将如何做)不起作用! 浏览器得到一个401非法的,但然后提示input凭据,当input一个空白的屏幕。 然后单击地址栏并按Enter键,执行以下两项操作之一,具体取决于凭据是用于远程还是本地AD:
Authorization: Negotiate <60 or so random chars> ) 无论哪种方式,它的提示是错误的!
有这些症状的解释吗? 我们的设置能做我们想要的吗?
关于上述描述可能是错误的:关于Jetty服务器,我提到的任何configuration都应该是正确的,就像我做的那样。 我很高兴提供更多的细节。 任何有关AD或父networking浏览器的configuration都有可能被怀疑,因为它不在我的控制之下,而且我已经将configuration报告给我,而不是自己看到它。
没有看到数据包捕获,我猜想HTTP / http://www.website.com SPN需要注册到运行该应用程序的帐户。 微软的目录服务团队有一个很好的多部分职位,在下面的URL中解决了这个问题。
在每个环境中从客户端运行数据包捕获(netmon,wireshark)以确定正在查找的是哪个SPN。 一旦确定,使用setspn cmd将其注册到运行该应用程序的帐户。
FWIW,Kerberos只能在LAN上工作。 如果有人需要无法访问域控制器的访问权限,那么您需要考虑使用Shibboleth或ADFS等SSO。
编辑:如@ @ alex-h所述,浏览器需要configuration为通过Kerberos进行静默身份validation。
最后,这是Microsoft Sharepoint部署的常见问题。 他们希望通过Kerberos的SSO在用户对域进行身份validation后默默发生。 因此,如果上述答案没有解决您的问题,请尝试检查他们的论坛,如下所示:
Chrome,Safari或FireFox上的Kerberos
请从没有启用NTLM的浏览器(Chrome / Firefox)中尝试第一次。 似乎问题在于您启用了预authentication,并且双向信任可能不可用。
对于预authentication看看这里https://support.microsoft.com/en-us/kb/2749007和这里https://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html 。