【发布时间】:2014-05-20 11:49:25
【问题描述】:
我目前正在为客户实施基于 Java、Tomcat 和 Kerberos 的单点登录解决方案。 用户将通过其客户端浏览器访问 Intranet Tomcat 应用程序的 URL,Tomcat 应用程序通过 Kerberos 获取用户的凭据并将其重定向到实际的 Web 应用程序。 我们客户的环境是充当 KDC 的 Windows AD 服务器和 Linux Tomcat 应用程序服务器的典型混合。 SSO 功能应该用于 Windows 和 Linux 客户端。这似乎与我在网上找到的大多数答案不同,人们拥有 Linux Web 应用程序服务器但只使用 Windows 客户端。
现在,在我的本地设置中,我遇到了一些奇怪的行为。我的开发环境是在 Windows 7 下从 MyEclipse 8.6 运行的 Tomcat 7.0.26。我的测试环境是 Centos 6 机器上的 Apache Web 服务器后面的 Tomcat 7.0.26 或 7.0.53。我已经正确设置了 AD 服务器,生成了必要的 keytab 文件等,并且一切都在开发环境中运行顺利。我可以使用 IE 和 Firefox 从 Linux 和 Windows 客户端访问 Tomcat 应用程序,Kerberos 身份验证继续进行,并且我得到了正确的重定向。
在测试服务器上部署 Tomcat 应用程序时,它会在尝试从 Windows 客户端登录时继续工作。但是,当我尝试从 Linux 客户端访问测试服务器时(我已尝试从 Linux Mint 13 和 Ubuntu 13.10),我收到以下错误:
javax.servlet.ServletException:GSSException:没有找到凭据:1.3.6.1.5.2.51.3.6.1.5.2.5 用法:接受 net.sourceforge.spnego.SpnegoHttpFilter.doFilter(SpnegoHttpFilter.java:233)
我不得不承认我没有正确理解这条信息。它是否指向客户端提供的凭据有问题,或者是应用程序服务器与 KDC 协商的问题?我对这个问题进行了一些研究,发现指示的 oid 1.3.6.1.5.2.5 代表 GSS_IAAKERB_MECHANISM 而不是 GSS_KRB5_MECHANISM 或 GSS_SPNEGO_MECHANISM,我觉得这很奇怪。此外,似乎没有其他人有完全相同的问题。
我尝试从 MIT Kerberos 切换到 Heimdal Kerberos 并返回。我试过Firefox和Chromium,在应用服务器上我在Tomcat 7.0.26和7.0.53之间切换,问题仍然存在。我正在使用最新的 spnego.jar。
现在:从 Linux 调用 Windows 开发机器上运行的 Tomcat 成功,从 Linux 客户端调用 Linux 应用程序服务器失败,两种浏览器都尝试了相同的错误消息。
对此有什么想法吗?
【问题讨论】:
标签: java linux tomcat kerberos spnego