我正在尝试使用带有 tomcat的http://spnego.sourceforge.net组件对 AD 进行身份验证。
我已经创建了我的 SPN 的“setspn.exe -A HTTP/servername SVCTomcat”和“setspn.exe -A HTTP/servername.fqdn.net SVCTomcat”
我已经创建了我的 krb5.conf 和 login.conf 文件并在 web.xml 中设置了过滤器,即。
<filter-name>SpnegoHttpFilter</filter-name>
<filter-class>net.sourceforge.spnego.SpnegoHttpFilter</filter-class>
<param-name>spnego.allow.unsecure.basic</param-name>
<param-value>false</param-value>
<param-name>spnego.login.client.module</param-name>
<param-value>spnego-client</param-value>
<param-name>spnego.krb5.conf</param-name>
<param-value>krb5.conf</param-value>
<param-name>spnego.login.conf</param-name>
<param-value>login.conf</param-value>
<param-name>spnego.preauth.username</param-name>
<param-value>SVCTomcat</param-value>
<param-name>spnego.preauth.password</param-name>
<param-value>Pasword</param-value>
<param-name>spnego.login.server.module</param-name>
<param-value>spnego-server</param-value>
<param-name>spnego.prompt.ntlm</param-name>
<param-value>false</param-value>
<param-name>spnego.logger.level</param-name>
<param-value>2</param-value>
请注意,我已经从中删除了无关的标签,因此它不是实际的 XML。
当我转到受此过滤器保护的页面时,我会在 catalina 日志文件中得到它。2010 年 3 月 25 日 12:41:26 org.apache.catalina.startup.Catalina 开始信息:服务器在 4615 毫秒内启动 2010 年 3 月 25 日 12:41:47 net.sourceforge.spnego.SpnegoHttpFilter doFilter FINE:principal=SYSTEM @TESTDOMAIN
在网站上的 hello_spnego.jsp 示例中,它只报告用户 tomcat 的名称以 (SYSTEM) 身份运行,而不是我正在连接的用户。
似乎作者在他的调试页面中途停止了,所以除了三次检查我的配置外,我没有其他地方可以查看。
有任何想法吗?
假设您正在使用与 Tomcat 在同一台机器上运行的 Web 浏览器来访问 hello_spnego.jsp 页面,这就是我想象的情况:
您没有设置 SpnegoHttpFilter 配置参数“spnego.allow.localhost”。
虽然过滤器的参考指南 ( http://spnego.sourceforge.net/reference_docs.html ) 声明此设置默认为 false,但仔细阅读源代码(SpnegoFilterConfig.java 第 80 行)表明此参数默认为 true。
当此参数设置为 true 时,SpnegoHttpFilter 将绕过身份验证,而是将经过身份验证的主体设置为运行 Tomcat 的用户帐户。这就是您得到“SYSTEM@TESTDOMAIN”结果的原因。
如果我最初的假设是正确的,请尝试从远程机器访问 hello_spnego.jsp 页面,它应该执行实际的身份验证。(您可能需要为您的浏览器启用 Kerberos 身份验证。)
请注意,过滤器作者通过位于http://sourceforge.net/projects/spnego/forums/的 SourceForge 项目论坛积极回答问题