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

Posted

技术标签:

【中文标题】SPNEGO Kerberos 单点登录在 tomcat 服务器的 AD 域中不起作用【英文标题】:SPNEGO Kerberos Single Sign On does not work in AD domain for tomcat server 【发布时间】:2016-08-04 14:53:13 【问题描述】:

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

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

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

调试的 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);

您有解决此问题的建议吗?

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

【问题讨论】:

您是否为服务器注册了 SPN? 【参考方案1】:

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

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

【讨论】:

以上是关于SPNEGO Kerberos 单点登录在 tomcat 服务器的 AD 域中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Apache HttpComponents HttpClient 5.0 - Kerberos SPNEGO 客户端

Kerberos+LDAP+NFSv4 实现单点登录

Kerberos+LDAP+NFSv4 实现单点登录(上)

微服务实践分享认证授权中心

Kerberos+LDAP+NFSv4 实现单点登录(续2)--一键安装

Spring-security、Tomcat 和 SPNEGO - 最佳方法