Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat Windows身份验证:JNDIRealm不';不要使用SPNEGO委派的凭据_Java_Tomcat_Active Directory_Windows Authentication_Spnego - Fatal编程技术网

Java Tomcat Windows身份验证:JNDIRealm不';不要使用SPNEGO委派的凭据

Java Tomcat Windows身份验证:JNDIRealm不';不要使用SPNEGO委派的凭据,java,tomcat,active-directory,windows-authentication,spnego,Java,Tomcat,Active Directory,Windows Authentication,Spnego,我们在Linux上运行Tomcat 7.0.53,我们正在尝试使Windows身份验证工作如下所述: SPNEGO单独工作很好,它可以很好地验证用户身份 然后我们将JNDIRealm与LDAP连接以获取用户角色,这就是问题所在 在通过SPNEGO成功进行用户身份验证之后,我们尝试在JNDIRealm中进行身份验证,但它似乎没有使用SPNEGO的委托凭据,因此身份验证失败。 此外,当我们尝试使用UserDatabaseRealm而不是JNDIRealm并在tomcat-users.xml中为用户设

我们在Linux上运行Tomcat 7.0.53,我们正在尝试使Windows身份验证工作如下所述:

SPNEGO单独工作很好,它可以很好地验证用户身份

然后我们将JNDIRealm与LDAP连接以获取用户角色,这就是问题所在

在通过SPNEGO成功进行用户身份验证之后,我们尝试在JNDIRealm中进行身份验证,但它似乎没有使用SPNEGO的委托凭据,因此身份验证失败。 此外,当我们尝试使用UserDatabaseRealm而不是JNDIRealm并在tomcat-users.xml中为用户设置相应的角色时,这个领域也不会使用这些凭据,身份验证再次失败

卡塔琳娜日志说:

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="(&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>

Application context.xml:

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

应用程序web.xml:

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

斯普尼戈
使用FORM auth方法时,JNDIRealm配置(虽然没有最后3个参数-authentication、useDelegatedCredential和spnegoDelegationQop)工作得非常好

我们尝试使用SPNEGO SourceForge,将SPNEGO用作HttpFilter或阀门,但也没有成功


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

自己解决了这个问题。问题出在JNDIRealm的stripRealmForgs参数中——要么省略它(就像我们的例子中那样),要么将它设置为true,这会使JNDIRealm尝试连接到空主机。当我们设置stripRealmForGss=“false”时,突然一切都像一个符咒一样工作了