Tomcat + Active Directory

Не думаю, что кому-то может такое понадобиться, но мало ли.
Итак задача сделать логин с помощью учетной записи из Active Directory в приложение работающее на Apache Tomcat.

Tomcat 5.5 + Example Apps(для тестирования)

  • Создаем в Active Directory группу Tomcat Group.
  • Создаем ключ для SSL соединения.
    keytool -genkey -alias tomcat -keyalg RSA
    По умолчанию ключ надо создавать с паролем changeit, а положить(сделать линк) ключ в папку с томкатом.
    ln -s ~/.keystore /usr/share/tomcat5.5/.keystore
    или
    cp ~/.keystore /usr/share/tomcat5.5/.keystore
    если вам не нравиться такой пароль и путь сделайте его какой нравиться, но в server.xml в <Connector> его надо будет указать.
    keystoreFile=»/путь/к/.keystore» keystorePass=»дер_пароль»
  • Меняем server.xml добавяем + разкоментируем следующие строчки.
    Раскоментируем строчки про SSL:

    <Connector port=»8443″ maxHttpHeaderSize=»8192″
    maxThreads=»150″ minSpareThreads=»25″ maxSpareThreads=»75″
    enableLookups=»false» disableUploadTimeout=»true»
    acceptCount=»100″ scheme=»https» secure=»true»
    clientAuth=»false» sslProtocol=»TLS» />

    И дописываем следующие строчки:
    <Realm className=»org.apache.catalina.realm.JNDIRealm» debug=»99″
    connectionURL=»ldap://192.168.1.1:389″  <!— Доменный контроллер —>
    connectionName=»CN=ldap,OU=Users,DC=trex,DC=com»
    <!— Пользователь для авторизации,права по минимум —>
    connectionPassword=»ldap» <!— Пароль—>
    referrals=»follow»
    userBase=»OU=Users,DC=trex,DC=com» <!—Место пользователей—>
    userSearch=»(sAMAccountName={0})»
    userSubtree=»true»
    roleBase=»OU=Groups,DC=trex,DC=com» <!— Место нахождение группы, которая сможет—>
    roleName=»name»
    roleSubtree=»true»
    roleSearch=»(member={0})»
    />

    В некоторых местах пишут, что надо все остальные Realm закоментировать. Я не коментировал, работает.

  • Идем в web.xml приложения которое требудет авторизации. В моем случае это. /usr/share/tomcat5.5-webapps/jsp-examples/WEB-INF/web.xml. Убираем там такие же уже существующие теги и добавляем свои вот такие.<security-constraint>
    <display-name>npuMepbI</display-name>
    <web-resource-collection>
    <web-resource-name>Protected Area</web-resource-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.html</url-pattern>
    <url-pattern>*.xml</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>  <!—Перекидывает на SSL порт —>
    </user-data-constraint>
    <auth-constraint>
    <role-name>Tomcat Group</role-name> <!—Название группы в Active Directory —>
    </auth-constraint>
    </security-constraint>
    <login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
    <form-login-page>/security/protected/login.jsp</form-login-page> <!—логин скрипт, есть в examples —>
    <form-error-page>/security/protected/error.jsp</form-error-page> <!— error скрипт, есть в examples —>
    </form-login-config>
    </login-config>
    <security-role>
    <description>Tomcat Group Description</description> <!— Описание группы —>
    <role-name>Tomcat Group</role-name> <!—Название группы в Active Directory —>
    </security-role>

  • Перезапускаем Tomcat, пробуем зайти на страницу с примерами. Первое, что должно броситься в глаза, это https и изменившийся порт. Потом будет приглашение ввести пароль. Если все сделано правильно, загрузиться страница с примерами.

Удачной настройки.