gpt4 book ai didi

java - Tomcat Windows 身份验证 : JNDIRealm doesn't use SPNEGO delegated credentials

转载 作者:搜寻专家 更新时间:2023-11-01 03:05:49 26 4
gpt4 key购买 nike

我们在 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 的委托(delegate)凭证,因此身份验证失败。此外,当我们尝试使用 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;
};

服务器.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="(&amp;(objectClass=user)(userPrincipalName={0}))"
userRoleName="memberOf"
userSubtree="true"
roleBase="***"
roleName="name"
roleSubtree="true"
roleSearch="(&amp;(objectClass=group)(member={0}))"
referrals="follow"
authentication="none"
useDelegatedCredential="true"
spnegoDelegationQop="auth"
/>
</Realm>

应用程序上下文.xml:

<Valve 
className="org.apache.catalina.authenticator.SpnegoAuthenticator"
storeDelegatedCredential="true"
/>

应用程序 web.xml:

<login-config>
<auth-method>SPNEGO</auth-method>
</login-config>

当使用 FORM 身份验证方法时,JNDIRealm 配置(尽管没有最后 3 个参数 - 身份验证、useDelegatedCredential 和 spnegoDelegationQop)工作得非常好

我们尝试使用 SPNEGO SourceForge,将 SPNEGO 作为 HttpFilter 或 Valve,但也没有成功。

这个配置有什么问题吗?我们如何让 JNDIRealm 使用 SPNEGO 委托(delegate)凭证?

最佳答案

我们自己解决了这个问题。问题出在 JNDIRealm 的 stripRealmForGss 参数中——忽略它(在我们的例子中)或将其设置为 true 使得 JNDIRealm 尝试连接到空主机。当我们设置 stripRealmForGss="false"时,突然一切都像魅力一样运作。

关于java - Tomcat Windows 身份验证 : JNDIRealm doesn't use SPNEGO delegated credentials,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22982164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com