带有SPNEGO SSO的java Tomcat 6仍会提示输入登录名和密码
我正在尝试使用SPNEGO filter为Tomcat(6)设置Windows Active Directory SSO
我已经按照示例进行了设置,但是当我尝试访问hello_spnego时,仍然会提示我输入登录名和密码。jsp
我可能遗漏了一些东西,所以这是我的配置:
网络。xml(与spnego相关):
<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>false</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.login.server.module</param-name>
<param-value>spnego-server</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>aqw</param-value>
</init-param>
<init-param>
<param-name>spnego.preauth.password</param-name>
<param-value>pass</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。形态:
[libdefaults]
default_realm = TEST.LOCAL
default_tkt_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
default_tgs_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
forwardable=true
[realms]
TEST.LOCAL = {
kdc = SERVER_WITH_AD:88
default_realm = TEST.LOCAL
}
[domain_realm]
dev.local = TEST.LOCAL
.dev.local = TEST.LOCAL
登录。形态:
spnego-client {
com.sun.security.auth.module.Krb5LoginModule required;
};
spnego-server {
com.sun.security.auth.module.Krb5LoginModule required
storeKey=true
isInitiator=false
useKeyTab=true
keyTab="C:\Osys\QuartisTools\Tomcat\conf\aqw.keytab"
;
};
编辑:以下是我所做的:
- 我在我的服务器上创建了一个用户(aqw),服务器是带有广告的
我使用以下命令设置他的SPN:
setspn-一个HTTP/SERVER_和_AD.Test。本地aqw
我使用以下命令为他创建了一个keytab文件:
ktpass/out c:\aqw。keytab/mapuseraqw@Test.local/princhhttp/TOMCAT_SERVER@Test.local/pass*/kvno 0
我将keytab文件传输到Tomcat/conf。
- 我添加了登录名。conf和krb5。conf到Tomcat/conf
- 我编辑了我的用户帐户(在AD的用户界面上)以接受AES 128位加密李>
- 我将JCE JAR添加到jdk1中。7.0_51/jre/lib/security fromthis page在从另一个问题上找到信息之后李>
其他信息:
-带有广告的服务器运行Windows SERVER 2012(x64)
-TOMCAT_服务器运行Windows7Ultimate(x64)
编辑2: 正如Whome所建议的,我将地址添加到了受信任站点的列表中
在某个时候,我不再看到用户名/登录提示,但我现在在Tomcat中遇到错误(显示为HTTP 500错误):
KrbException:无效参数(400)-找不到适当类型的密钥,无法使用HMAC SHA1-96解密AP REP-AES256 CTS模式
所以它可能找不到我的键盘
# 1 楼答案
在出现“找不到密钥”错误后,我重新读取了conf文件,Whome建议将文件名改为Unix样式。然后我把它们移到conf文件旁边,以获得尽可能短的路径。我还添加了一个主体as in the server keytab testing procedure described here:,以便登录。配置文件是:
这给了我一个校验和错误,所以我重新生成了我的keytab文件
这又显示了一个不同的错误:
javax。安全啊。登录。LoginException:没有可用于从用户获取身份验证信息的回调处理程序
所以我编辑了我的网站。xml允许不安全、基本、NTLM提示符和本地主机。就像这样:
奇怪的是,这显示了另一个例外:
javax。安全啊。登录。LoginException:没有可用于从用户获取身份验证信息的回调处理程序
我说得很奇怪,因为我的理解是,通过允许NTLM提示符,我授权了另一种身份验证方法
最奇怪的是,今天早上,它起作用了。我不知道为什么。重新启动服务器后,它仍能工作。我收到“你好用户!”向正确的用户发送消息。但是the HelloKeytab test class不起作用
编辑:最后,它停止工作,无法让它工作。我一直收到一个校验和错误。所以我最终使用了Waffle