Я перемещаю приложение с WebLogic на JBoss EAP 6.4, и оно почти работает. Проблема в том, что я могу заставить аутентификацию Kerberos работать, только если я играю со свойством isInitiator в моем standalone-full-ha.xml для spnego-server.
Если я устанавливаю isInitiator=true, то получаю сообщение об ошибке при запуске приложения "Информация перед аутентификацией недействительна".
Если я установлю isInitiator=false, то при переходе на страницу я получаю «Указан NTLM. Понижен до базовой аутентификации (и/или SSL), но переход на более раннюю версию не поддерживается».
Однако, если я затем вернусь к isInitiator=true после того, как он потерпел неудачу с false, он работает в течение дня.
На следующий день он возвращается к «Информация перед аутентификацией была недействительной». Мне нужно снова попытаться подключиться с isInitiator=false, чтобы он снова заработал.
Мой автономный-полный-ha.xaml выглядит так:
<system-properties>
<property name="java.net.preferIPv4Stack" value="true"/>
<property name="org.apache.coyote.http11.Http11Protocol.SERVER" value=""/>
<property name="java.security.auth.login.config" value="/app/jb-8443/login.conf"/>
<property name="java.security.krb5.conf" value="/app/jb-8443/krb5.conf"/>
<property name="sun.security.krb5.debug" value="true"/>
<property name="jboss.security.disable.secdomain.option" value="true"/>
<property name="javax.security.auth.useSubjectCredsOnly" value="false"/>
</system-properties>
...
<security-domain name="spnego-client" cache-type="default">
<authentication>
<login-module code="com.sun.security.auth.module.Krb5LoginModule" flag="required"/>
</authentication>
</security-domain>
<security-domain name="spnego-server" cache-type="default">
<authentication>
<login-module code="com.sun.security.auth.module.Krb5LoginModule" flag="required">
<module-option name="storeKey" value="true"/>
<module-option name="useKeyTab" value="true"/>
<module-option name="useTicketCache" value="false"/>
<module-option name="isInitiator" value="true"/>
<module-option name="keyTab" value="/app/jb-8443/krb5.keytab"/>
<module-option name="debug" value="true"/>
<module-option name="principal" value="[email protected]"/>
<module-option name="doNotPrompt" value="true"/>
</login-module>
</authentication>
</security-domain>
<security-domain name="com.sun.security.jgss.krb5.initiate" cache-type="default">
<authentication>
<login-module code="com.sun.security.auth.module.Krb5LoginModule" flag="required">
<module-option name="storeKey" value="true"/>
<module-option name="useKeyTab" value="true"/>
<module-option name="useTicketCache" value="false"/>
<module-option name="isInitiator" value="true"/>
<module-option name="keyTab" value="/app/jb-8443/krb5.keytab"/>
<module-option name="debug" value="true"/>
<module-option name="principal" value="[email protected]"/>
<module-option name="doNotPrompt" value="true"/>
</login-module>
</authentication>
</security-domain>
<security-domain name="com.sun.security.jgss.krb5.accept" cache-type="default">
<authentication>
<login-module code="com.sun.security.auth.module.Krb5LoginModule" flag="required">
<module-option name="storeKey" value="true"/>
<module-option name="useKeyTab" value="true"/>
<module-option name="useTicketCache" value="false"/>
<module-option name="isInitiator" value="true"/>
<module-option name="keyTab" value="/app/pyks0app/jb-8443/krb5.keytab"/>
<module-option name="debug" value="true"/>
<module-option name="principal" value="[email protected]"/>
<module-option name="doNotPrompt" value="true"/>
</login-module>
</authentication>
</security-domain>
В файле login.conf есть:
com.sun.security.jgss.krb5.initiate {
Требуется com.sun.security.auth.module.Krb5LoginModule
doNotPrompt=истина
Principal="[email protected]"
useKeyTab = истина
useTicketCache = ложь
отладка = истина
keyTab="/app/jb-8443/krb5.keytab"
ключ хранилища = истина;
};
com.sun.security.jgss.krb5.accept {
Требуется com.sun.security.auth.module.Krb5LoginModule
doNotPrompt=истина
Principal="[email protected]"
useKeyTab = истина
keyTab="/app/jb-8443/krb5.keytab"
storeKey = правда
useTicketCache = ложь
инициатор = ложь
обновитьKrb5Config=истина
модуль Баннер = правда
магазинпасс = истина;
};
spnego-клиент {
Требуется com.sun.security.auth.module.Krb5LoginModule;
};
spnego-сервер {
Требуется com.sun.security.auth.module.Krb5LoginModule
storeKey = правда
useKeyTab = истина
useTicketCache = ложь
keyTab="/app/jb-8443/krb5.keytab"
отладка = истина
Principal="[email protected]"
не подсказывать=истина;
};
В развертывании WebLogic были только части spnego-client и spnego-server. Я добавил части com.sun.security.jgss.krb5.initiate и com.sun.security.jgss.krb5.accept, и после их добавления я смог подключиться с помощью трюка isInitiator flip.
Это можно обойти? Например, пропустить предварительную аутентификацию, если она не подключилась сегодня? Если что-то кешируется только на 24 часа, сохранить его дольше?
Нужны ли эти инициирующие и принимающие части поверх spnego-сервера?