我们在Linux上运行Tomcat 7.0.53,我们正在努力使Windows身份验证工作如下所述:https://tomcat.apache.org/tomcat-7.0-doc/windows-auth-howto.html#Tomcat_instance_%28Linux_server%29。
仅SPNEGO工作正常,它可以很好地验证用户。
然后我们将JNDIRealm与LDAP连接以获取用户角色,以及出现问题的地方。
在SPNEGO成功进行用户身份验证后,我们尝试在JNDIRealm中进行身份验证,似乎它不使用SPNEGO的委派凭据,并且身份验证失败。 此外,当我们尝试使用UserDatabaseRealm而不是JNDIRealm并在tomcat-users.xml中为用户设置相应的角色时,此Realm也不会使用这些凭据,并且auth再次失败。
Catalina日志说:
Apr 09, 2014 1:56:46 PM org.apache.catalina.realm.CombinedRealm authenticate
FINE: Attempting to authenticate user "username@DEFAULT.REALM.RU" with realm
"org.apache.catalina.realm.JNDIRealm/1.0"
Apr 09, 2014 1:56:46 PM org.apache.catalina.realm.CombinedRealm authenticate
FINE: combinedRealm.authFail
[Krb5LoginModule]: Entering logout
[Krb5LoginModule]: logged out Subject
我们的配置文件如下所示。
kr5.ini:
[logging]
default = FILE:/var/lib/tomcat/logs/krb5libs.log
kdc = FILE:/var/lib/tomcat/logs/krb5kdc.log
admin_server = FILE:/var/lib/tomcat/logs/kadmind.log
[libdefaults]
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
default_realm = DEFAULT.REALM.RU
[realms]
DEFAULT.REALM.RU = {
kdc = dc01-one.default.realm.ru:88
default_domain = DEFAULT.REALM.RU
}
[domain_realm]
.DEFAULT.REALM.RU = DEFAULT.REALM.RU
.default.realm.ru = DEFAULT.REALM.RU
default.realm.ru = DEFAULT.REALM.RU
的Jaas.conf:
com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required
doNotPrompt=true
principal="HTTP/appserver.default.realm.ru@DEFAULT.REALM.RU"
useKeyTab=true
keyTab="/var/lib/tomcat/conf/tomcat.keytab"
storeKey=true
debug=true;
};
com.sun.security.jgss.krb5.accept {
com.sun.security.auth.module.Krb5LoginModule required
doNotPrompt=true
principal="HTTP/appserver.default.realm.ru@DEFAULT.REALM.RU"
useKeyTab=true
keyTab="/var/lib/tomcat/conf/tomcat.keytab"
storeKey=true
debug=true;
};
server.xml中:
<Realm className="org.apache.catalina.realm.JNDIRealm"
debug="9"
connectionURL="ldap://1.1.1.1:3268"
connectionName="user_sys@default.realm.ru"
connectionPassword="***"
userBase="DC=****,DC=ru"
userSearch="(&(objectClass=user)(userPrincipalName={0}))"
userRoleName="memberOf"
userSubtree="true"
roleBase="***"
roleName="name"
roleSubtree="true"
roleSearch="(&(objectClass=group)(member={0}))"
referrals="follow"
authentication="none"
useDelegatedCredential="true"
spnegoDelegationQop="auth"
/>
</Realm>
应用程序context.xml:
<Valve
className="org.apache.catalina.authenticator.SpnegoAuthenticator"
storeDelegatedCredential="true"
/>
应用程序web.xml:
<login-config>
<auth-method>SPNEGO</auth-method>
</login-config>
使用FORM auth-method时,JNDIRealm配置(尽管没有最后3个参数 - authentication,useDelegatedCredential和spnegoDelegationQop)运行良好
我们尝试使用SPNEGO SourceForge,将SPNEGO用作HttpFilter或Valve,但也没有成功。
此配置中的任何内容都有误吗?我们如何让JNDIRealm使用SPNEGO委派的凭证?
答案 0 :(得分:3)
自己解决了这个问题。问题出在JNDIRealm的stripRealmForGss参数中 - 要么省略它(如我们的情况),要么将其设置为true使JNDIRealm尝试连接到空主机。当我们设置stripRealmForGss =“false”时,突然间一切都像魅力一样。