我正在尝试使用http://spnego.sourceforge.net与 tomcat 的组件。
我已经创建了我的 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) 身份运行的用户的名称,而不是我正在连接的用户的名称。
似乎作者在调试页面中途就停了下来,所以除了再三检查我的配置之外,我没有其他可查看的地方。
有任何想法吗?
答案1
假设您使用与 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 身份验证。)
请注意,过滤器作者积极通过 SourceForge 项目论坛回答问题http://sourceforge.net/projects/spnego/forums/