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

SPNEGO Kerberos单点登录在tomcat服务器的AD域中不起作用,tomcat,active-directory,single-sign-on,kerberos,spnego,Tomcat,Active Directory,Single Sign On,Kerberos,Spnego,我遵循了SPNEGO示例测试代码HelloKDC.java中提到的所有步骤,但单点登录不起作用。 我们的域名是ITLAB(Active directory域),它有两台机器“Win8Serv”和“Win8Client” Tomcat7在“Win8Serv”计算机上运行,带有“KerbServUser@ITLAB“全权证书。现在我登录到“Win8Client”时使用“KerbServUser@ITLAB“全权证书。我在IE浏览器中输入了“”(为IE启用了SSO选项,启用了集成Windows身份验证

我遵循了SPNEGO示例测试代码HelloKDC.java中提到的所有步骤,但单点登录不起作用。

我们的域名是ITLAB(Active directory域),它有两台机器“Win8Serv”和“Win8Client”

Tomcat7在“Win8Serv”计算机上运行,带有“KerbServUser@ITLAB“全权证书。现在我登录到“Win8Client”时使用“KerbServUser@ITLAB“全权证书。我在IE浏览器中输入了“”(为IE启用了SSO选项,启用了集成Windows身份验证),它会提示登录窗口(它不应询问凭据

调试过的SPNEGO代码,它使用的是basic auth

在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用户帐户上注册SPN HTTP/win8serv.itlab.comkerbservuser@itlab.com. 客户端计算机需要在DNS中找到FQDN,这将是您的Tomcat服务器,然后在KDC中找到HTTP服务点(在AD域控制器上运行),以获取Tomcat运行的HTTP服务的Kerberos服务票证。当SPN中的FQDN与DNS中的FQDN匹配时,您的客户机知道它需要去哪里,这正是Kerthikeyan的目的地


您的web浏览器必须将站点列在其“本地Intranet”区域中,因为Windows会将凭据信息(在本例中为Kerberos服务票证)传输到web服务器,这些服务器会请求(Tomcat需要这样做)进行身份验证。

您是否已为服务器注册SPN?