这个Kerberos / AD设置可能吗?

我们有一个稍微复杂的IDAM设置:

在这里输入图像描述

也就是说,最终用户的机器和浏览器与父AD位于同一个networking中,我们基于Jetty的应用程序和可以与之通话的AD(本地AD)位于另一个networking中。

两个AD之间有双向的信任。 父networking中的浏览器在受信任的站点中具有本地域。

Jetty服务器的设置如下:

  • 它使用针对本地AD中的主体生成的密钥表文件
  • 它在本地AD中定义的用户下作为Windows服务运行
  • 域,领域映射和kdc是针对本地AD的域定义的
  • 它使用spnego – isInitiator设置为false; doNotPrompt是真的; storeKey是真的

问题是:

  • 作为testing,从本地networking内的浏览器访问服务器(即链接到本地​​AD)的工作原理 – Kerberosdebugging信息出现在日志中,我可以在HTTPstream量中看到正确的Kerberos协商,并且用户自动login。 辉煌。
  • 然而 ,从父networking中的浏览器访问服务器(这是我们的用户将如何做)不起作用! 浏览器得到一个401非法的,但然后提示input凭据,当input一个空白的屏幕。 然后单击地址栏并按Enter键,执行以下两项操作之一,具体取决于凭据是用于远程还是本地AD:

    • 本地AD证书然后login,在日志中从头开始使用Kerberos(GET请求,401非法响应,Kerberos头部请求等)
    • 远程AD证书不login(GET请求,401非法响应,看起来像一个NTLM头: Authorization: Negotiate <60 or so random chars>

无论哪种方式,它的提示是错误的!

有这些症状的解释吗? 我们的设置能做我们想要的吗?

关于上述描述可能是错误的:关于Jetty服务器,我提到的任何configuration都应该是正确的,就像我做的那样。 我很高兴提供更多的细节。 任何有关AD或父networking浏览器的configuration都有可能被怀疑,因为它不在我的控制之下,而且我已经将configuration报告给我,而不是自己看到它。

没有看到数据包捕获,我猜想HTTP / http://www.website.com SPN需要注册到运行该应用程序的帐户。 微软的目录服务团队有一个很好的多部分职位,在下面的URL中解决了这个问题。

https://blogs.technet.microsoft.com/askds/2008/05/29/kerberos-authentication-problems-service-principal-name-spn-issues-part-1/

在每个环境中从客户端运行数据包捕获(netmon,wireshark)以确定正在查找的是哪个SPN。 一旦确定,使用setspn cmd将其注册到运行该应用程序的帐户。

FWIW,Kerberos只能在LAN上工作。 如果有人需要无法访问域控制器的访问权限,那么您需要考虑使用Shibboleth或ADFS等SSO。

编辑:如@ @ alex-h所述,浏览器需要configuration为通过Kerberos进行静默身份validation。

  • Internet Explorer – 虽然TechNet文章并非专门针对您的应用程序,但步骤相同。
  • Firefox – 与IE链接相同,不完全匹配,但步骤相同。

最后,这是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