Фон
SPNEGOв RFC 4178 используется для согласования либо NTLM или Kerberos на основе единого входа. Типичным случаем использования веб-приложений является повторное использование аутентификации, используемой настольными компьютерами, такими как Windows или Linux.
В этой статье мы рассмотрим подходы к аутентификации SPNego с помощью JBoss Enterprise Application Platform.
JBoss Negotiation — это библиотека, которая обеспечивает поддержку аутентификации SPNego в JBoss. Эта библиотека была интегрирована в JBoss EAP и сервер приложений WildFly.
контрольный список
- Получить JBoss EAP от jboss.org.
- Включите веб-приложение JavaEE для аутентификации SPNego.
- Настройте JBoss EAP для SPNego.
- Настройте свои браузеры для SPNego.
- Запустите JBoss EAP.
- Протестируйте свое веб-приложение.
Получить JBoss EAP от jboss.org
Загрузите JBoss EAP 6.2 или более новую версию с http://www.jboss.org/products/eap
Вы также можете использовать сервер приложений WildFly с http://www.wildfly.org. Ваша конфигурация может немного отличаться.
Включите веб-приложение JavaEE для аутентификации SPNego
В качестве отправной точки проще использовать демонстрационное веб-приложение. Затем вы можете изменить свое веб-приложение для аутентификации SPNego.
Демонстрационное веб-приложение, которое мы используем для этой статьи, называется моим spnego-demo моим коллегой Йозефом Казеком. Демо-веб-приложение доступно по адресу https://github.com/kwart/spnego-demo . Вы также можете скачать spnego-demo.war здесь .
С этого места можно получить полностью настроенное веб-приложение spnego-demo.war
.
Скопируйте spnego-demo.war в ваш каталог jboss-eap-6.2 / standalone / deployments.
Настройте EAP JBoss для аутентификации SPNego
Вам нужно будет настроить пару доменов безопасности и системных свойств в JBoss EAP6.
Существует два способа настройки: ручное редактирование или использование инструмента CLI.
Ручное редактирование файла конфигурации standalone.xml в jboss-eap-6.2 / standalone / configuration
Добавьте системные свойства в этот файл.
<system-properties> <property name="java.security.krb5.conf" value="/tmp/spnego-in-as7/krb5.conf"/> <property name="java.security.krb5.debug" value="true"/> <property name="jboss.security.disable.secdomain.option" value="true"/> </system-properties>
Не забудьте поместить этот блок сразу после блока расширений (около строки 25 файла конфигурации).
Добавьте домены безопасности в этот файл.
<security-domain name="SPNEGO" cache-type="default"> <authentication> <login-module code="SPNEGO" flag="required"> <module-option name="serverSecurityDomain" value="host"/> </login-module> </authentication> <mapping> <mapping-module code="SimpleRoles" type="role"> <module-option name="[email protected]" value="Admin"/> <module-option name="[email protected]" value="User"/> </mapping-module> </mapping> </security-domain> <security-domain name="host" cache-type="default"> <authentication> <login-module code="Kerberos" flag="required"> <module-option name="debug" value="true"/> <module-option name="storeKey" value="true"/> <module-option name="refreshKrb5Config" value="true"/> <module-option name="useKeyTab" value="true"/> <module-option name="doNotPrompt" value="true"/> <module-option name="keyTab" value="/tmp/spnego-in-as7/http.keytab"/> <module-option name="principal" value="HTTP/[email protected]"/> </login-module> </authentication> </security-domain>
Не забудьте поместить эти блоки в блок
<subsystem xmlns = «urn: jboss: domain: security: 1.2»> .
Использование интерфейса командной строки для обновления JBoss EAP
Перейдите в каталог bin JBoss EAP 6.2 и выполните следующее.
$ cat << EOT > $SPNEGO_TEST_DIR/cli-commands.txt /subsystem=security/security-domain=host:add(cache-type=default) /subsystem=security/security-domain=host/authentication=classic:add(login-modules=[{"code"=>"Kerberos", "flag"=>"required", "module-options"=>[ ("debug"=>"true"),("storeKey"=>"true"),("refreshKrb5Config"=>"true"),("useKeyTab"=>"true"),("doNotPrompt"=>"true"),("keyTab"=>"$SPNEGO_TEST_DIR/http.keytab"),("principal"=>"HTTP/[email protected]")]}]) {allow-resource-service-restart=true} /subsystem=security/security-domain=SPNEGO:add(cache-type=default) /subsystem=security/security-domain=SPNEGO/authentication=classic:add(login-modules=[{"code"=>"SPNEGO", "flag"=>"required", "module-options"=>[("serverSecurityDomain"=>"host")]}]) {allow-resource-service-restart=true} /subsystem=security/security-domain=SPNEGO/mapping=classic:add(mapping-modules=[{"code"=>"SimpleRoles", "type"=>"role", "module-options"=>[("[email protected]"=>"Admin"),("[email protected]"=>"User")]}]) {allow-resource-service-restart=true} /system-property=java.security.krb5.conf:add(value="$SPNEGO_TEST_DIR/krb5.conf") /system-property=java.security.krb5.debug:add(value=true) /system-property=jboss.security.disable.secdomain.option:add(value=true) :reload() EOT $ ./jboss-cli.sh -c --file=$SPNEGO_TEST_DIR/cli-commands.txt
Это объясняется в
https://github.com/kwart/spnego-demo/blob/master/README.md
Нам понадобится файл keytab.
В этом примере мы будем использовать сервер Kerberos с использованием ApacheDS (как описано в Приложении A).
$ java -classpath kerberos-using-apacheds.jar org.jboss.test.kerberos.CreateKeytab HTTP/[email protected] httppwd http.keytab
Обратите внимание, что http.keytab был настроен в домене безопасности с именем «host» в standalone.conf. Поэтому поместите файл keytab соответствующим образом, исправляя путь, определенный в домене безопасности.
Более подробная информация доступна по адресу https://github.com/kwart/kerberos-using-apacheds/blob/master/README.md.
JBoss EAP потребуется файл keytab. В этом примере мы используем keytab, называемый http.keytab
Существуют различные инструменты, такие как ktutil, для создания файлов ключей. Файлы ключей содержат принципы Kerberos и зашифрованные ключи. Важно защитить файлы keytab.
It is very important that JBoss EAP configuration for keytab in the security domain "host" refers to the actual path of the keytab file.
Настройте свои браузеры для SPNego
Браузеры, такие как Microsoft IE, Mozilla Firefox, Google Chrome, Apple Safari, имеют различные настройки для включения SPNego или встроенной аутентификации.
Запустите JBoss EAP
Перейдите в каталог bin JBoss EAP 6.2 и используйте standalone.sh (Unix / Linux) или standalone.bat для запуска вашего экземпляра.
Протестируйте свое веб-приложение
Предполагая, что вы выполнили шаги Приложения A для запуска сервера Kerberos и сделали kinit, вы готовы протестировать веб-приложение.
В этой статье мы использовали spnego-demo, мы можем проверить это, перейдя к
HTTP: // локальный: 8080 / SPNEGO-демо /
Вы можете щелкнуть ссылку «Страница пользователя» и увидеть имя участника как «[email protected]».
Приложение
Локальный сервер Kerberos
- Загрузите ZIP-файл https://github.com/kwart/kerberos-using-apacheds/archive/master.zip
- Разархивируйте zip-файл в каталог.
- Сборка пакета с использованием Maven.
$ mvn clean package
- Запустите сервер Kerberos как
$ java -jar target/kerberos-using-apacheds.jar test.ldif
- Был создан файл krb5.conf.
- Войдите сейчас используя [email protected]
$ kinit [email protected] Password for [email protected]: secret
- Запустите Firefox через командную строку, из которой запускался kinit На MacOSX
$open -a firefox http://localhost:8080/spnego-demo/
Приложение Б
Утилиты командной строки Kerberos
klist можно использовать для просмотра текущих билетов Kerberos.
$ klist Credentials cache: API:501:10 Principal: [email protected] Issued Expires Principal Feb 9 21:19:30 2014 Feb 10 07:19:27 2014 krbtgt/[email protected]
kdestroy может быть использован для очистки текущих билетов Kerberos.
Рекомендации
- Демо-приложение SPNego: https://github.com/kwart/spnego-demo
- Сервер Kerberos с использованием ApacheDS: https://github.com/kwart/kerberos-using-apacheds
- JBoss EAP 6 http://www.jboss.org/products/eap
- Открытый проект PicketLink: http://www.picketlink.org
Поиск проблемы
Remember krb5.conf is important for client side kerberos interactions. You can use a environment variable on Unix/Linux/Mac systems called KRB5_CONFIG to point to your krb5.conf
Подтверждение
Йозеф Чачек для проектов SPNego-demo и Kerberos_using_Apache DS.