Java 使用tomcat的Spnego登录仅适用于没有域名的主机名
我正在为我的Tomcat 7服务器设置Windows身份验证SSO。我使用的是Java 使用tomcat的Spnego登录仅适用于没有域名的主机名,java,tomcat,spnego,Java,Tomcat,Spnego,我正在为我的Tomcat 7服务器设置Windows身份验证SSO。我使用的是spnego sourceforge库,经过大量调整后,我成功地使其工作(当然,不是完全工作) 我使用的是keytab设置,当我使用不带任何域后缀的主机名登录到我的测试机器时,SSO工作得非常好。一旦我将域名添加到URL中,就会出现一个请求凭据的登录对话框。如果我输入这些,一切都会像预期的那样再次工作,但事实并非如此。一个线索是krb5.conf文件似乎被完全忽略了 那么,有谁能帮我想一想什么是错误的呢?感觉像是SPN
spnego sourceforge库
,经过大量调整后,我成功地使其工作(当然,不是完全工作)
我使用的是keytab设置,当我使用不带任何域后缀的主机名登录到我的测试机器时,SSO工作得非常好。一旦我将域名添加到URL中,就会出现一个请求凭据的登录对话框。如果我输入这些,一切都会像预期的那样再次工作,但事实并非如此。一个线索是krb5.conf文件似乎被完全忽略了
那么,有谁能帮我想一想什么是错误的呢?感觉像是SPN参与了进来,但我已经尝试了很多次,但似乎没有帮助
以下是我认为相关的信息
设置:-广告服务器是Win 2008
-Tomcat 7正在Win 8上运行
-客户使用Win7(通过IE和Chrome进行测试)
-Spnego库是版本7
web.xml设置。
<filter>
<filter-name>SpnegoHttpFilter</filter-name>
<filter-class>net.sourceforge.spnego.SpnegoHttpFilter</filter-class>
<init-param>
<param-name>spnego.allow.basic</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>spnego.allow.localhost</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>spnego.allow.unsecure.basic</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>spnego.login.client.module</param-name>
<param-value>spnego-client</param-value>
</init-param>
<init-param>
<param-name>spnego.krb5.conf</param-name>
<param-value>${catalina.home}/conf/krb5.conf</param-value>
</init-param>
<init-param>
<param-name>spnego.login.conf</param-name>
<param-value>${catalina.home}/conf/login.conf</param-value>
</init-param>
<init-param>
<param-name>spnego.preauth.username</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>spnego.preauth.password</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>spnego.login.server.module</param-name>
<param-value>spnego-server</param-value>
</init-param>
<init-param>
<param-name>spnego.allow.delegation</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>spnego.prompt.ntlm</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>spnego.logger.level</param-name>
<param-value>1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SpnegoHttpFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
krb5.conf
[libdefaults]
default_realm = TESTDOMAIN.LOCAL
default_tkt_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
default_tgs_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
permitted_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
[realms]
TESTDOMAIN.LOCAL = {
kdc = TESTDOMAIN-KDC.testdomain.local
default_domain = TESTDOMAIN.LOCAL
}
[domain_realm]
.TESTDOMAIN.LOCAL = TESTDOMAIN.LOCAL
TESTDOMAIN.LOCAL = TESTDOMAIN.LOCAL
setspn-L testuser的结果
Registered ServicePrincipalNames for CN=Test Server,OU=Users,OU=Testdomain,DC=Testdomain,DC=local:
HTTP/TESTHOST
HTTP/TESTHOST.testdomain.local
ktab-l-k测试结果.keytab
Keytab name: test.keytab
KVNO Principal
---- ---------------------------------
0 testuser@TESTDOMAIN.LOCAL
0 testuser@TESTDOMAIN.LOCAL
0 testuser@TESTDOMAIN.LOCAL
0 testuser@TESTDOMAIN.LOCAL
0 testuser@TESTDOMAIN.LOCAL
testhost的DNS设置已设置,因此反向查找指向具有全名的测试主机
ping -a 10.1.1.123
Pinging testhost.testdomain.local [10.1.1.123] with 32 bytes of data:
Reply from 10.1.1.123: bytes=32 time<1ms TTL=128
Reply from 10.1.1.123: bytes=32 time<1ms TTL=128
ping-a 10.1.1.123
Ping testhost.testdomain.local[10.1.1.123]和32字节的数据:
来自10.1.1.123的回复:字节=32个时间相关线程,带有一些对话框。只是为了链接在这里
ping -a 10.1.1.123
Pinging testhost.testdomain.local [10.1.1.123] with 32 bytes of data:
Reply from 10.1.1.123: bytes=32 time<1ms TTL=128
Reply from 10.1.1.123: bytes=32 time<1ms TTL=128