Статьи

SPNego аутентификация с помощью JBoss

Фон

SPNEGOв  RFC 4178 используется для согласования либо NTLM или Kerberos на основе единого входа. Типичным случаем использования веб-приложений является повторное использование аутентификации, используемой настольными компьютерами, такими как Windows или Linux.

В этой статье мы рассмотрим подходы к аутентификации SPNego с помощью JBoss Enterprise Application Platform.

JBoss Negotiation — это библиотека, которая обеспечивает поддержку аутентификации SPNego в JBoss. Эта библиотека была интегрирована в JBoss EAP и сервер приложений WildFly.

контрольный список

  1. Получить JBoss EAP от jboss.org.
  2. Включите веб-приложение JavaEE для аутентификации SPNego.
  3. Настройте JBoss EAP для SPNego.
  4. Настройте свои браузеры для SPNego.
  5. Запустите JBoss EAP.
  6. Протестируйте свое веб-приложение.

Получить 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

  1. Загрузите ZIP-файл  https://github.com/kwart/kerberos-using-apacheds/archive/master.zip 
  2. Разархивируйте zip-файл в каталог.
  3. Сборка пакета с использованием Maven.  
    $ mvn clean package
  4. Запустите сервер Kerberos как
    $ java -jar target/kerberos-using-apacheds.jar test.ldif
  5. Был создан файл krb5.conf.
  6. Войдите сейчас используя [email protected]
    $ kinit [email protected]
    Password for [email protected]: secret
  7. Запустите 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.

Рекомендации

  1. Демо-приложение SPNego:  https://github.com/kwart/spnego-demo 
  2. Сервер Kerberos с использованием ApacheDS:  https://github.com/kwart/kerberos-using-apacheds 
  3. JBoss EAP 6   http://www.jboss.org/products/eap 
  4. Открытый проект PicketLink:  http://www.picketlink.org 

Поиск проблемы

https://docs.jboss.org/author/display/PLINK/SPNego+Support+Questions

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

Подтверждение

Дарран Лофтхаус для замечательного проекта JBoss Negotiation Project и
Йозеф Чачек для проектов SPNego-demo и Kerberos_using_Apache DS.