SPNEGO Kerberos 单点登录在 tomcat 服务器的 AD 域中不起作用

SPNEGO Kerberos Single Sign On does not work in AD domain for tomcat server

我遵循了 http://spnego.sourceforge.net/spnego_tomcat.html 中提到的所有步骤(SPNEGO 示例测试代码 HelloKDC.java 按预期工作)但是 单点登录不起作用。

我们的域名是ITLAB(Active directory domain),有两台机器"Win8Serv"和"Win8Client".

Tomcat7 在 "Win8Serv" 机器上 运行,凭据 "KerbServUser@ITLAB"。现在我使用 "KerbServUser@ITLAB" 凭据登录到 "Win8Client"。我在 IE 浏览器中输入“http://Win8Serv.itlab.com:8181/hello_spnego.jsp”(为 IE 启用 SSO 选项,启用集成 Windows 身份验证),它提示登录 Window(它不应该询问凭据).

已调试 SPNEGO 代码,它正在使用基本身份验证

在SpnegoAuthenticator.java

final SpnegoAuthScheme scheme = SpnegoProvider.negotiate(req, resp, basicSupported, this.promptIfNtlm, serverRealm);

if (scheme.isNegotiateScheme()) {
    principal = doSpnegoAuth(scheme, resp);

// BASIC scheme
} else if (scheme.isBasicScheme()) { // it is entering Basic Scheme
   principal = doBasicAuth(scheme, resp);
}

你有解决这个问题的建议吗?

如果您需要任何其他信息,请告诉我。

您需要在 AD 用户帐户 kerbservuser@itlab.com 上注册 SPN HTTP/win8serv.itlab.com。客户端机器需要在 DNS 中找到 FQDN,这将是您的 Tomcat 服务器,然后在 KDC 中找到 HTTP 服务点(在您的 AD 域控制器上的 运行s)以获取 Kerberos 服务票据HTTP 服务被 Tomcat 运行。当 SPN 中的 FQDN 与 DNS 中的 FQDN 匹配时,您的客户端计算机就知道它需要去哪里,这是 Kerthikeyan 开车去的地方。

您的网络浏览器必须在其 "Local Intranet" 区域中列出站点 http://win8serv.itlab.com,因为 Windows 会将凭据信息(在本例中为 Kerberos 服务票证)传输到网络服务器要求它(Tomcat 需要)进行身份验证。