sergey-gornostaev
@sergey-gornostaev
Седой и строгий

Как настроить прозрачную kerberos-аутентификацию на Tomcat?

Необходимо настроить прозрачную kerberos-аутентификацию. Причём, только для одного приложения. И нужно всё это только для того, чтобы приложение было в курсе, кто к нему пришёл, ограничивать доступ к нему не нужно.

Windows Authentication How-To читал. Всё сделал, как написано. Заглох на разделе "Web application", не могу понять, как этот Valve настроить.
  • Вопрос задан
  • 5687 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Автор вопроса, куратор тега Tomcat
Седой и строгий
Отвечу сам себе. Затык у меня возник потому, что одного Windows Authentication How-To мало. Кроме описанного в нём, нужно ещё в $CATALINA_HOME/<app-base>/<app-name>/WEB-INF/web.xml написать
<security-constraint>
    <display-name>All users</display-name>
    <web-resource-collection>
      <web-resource-name>All requests</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>*</role-name>
    </auth-constraint>
  </security-constraint>

  <security-role>
    <description>All users</description>
    <role-name>*</role-name>
  </security-role>

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

так как без авторизации не будет аутентификации. Кто бы мог догадаться. Valve, кстати, вписывается в $CATALINA_HOME/<app-base>/<app-name>/META-INF/context.xml в предельно элементарной форме
<Valve className="org.apache.catalina.authenticator.SpnegoAuthenticator" />

Но и это ещё не всё. Нужен ещё источник данных о пользователях - Realm. Я вписал его в $CATALINA_HOME/conf/server.xml в секцию host
<Realm className="org.apache.catalina.realm.JNDIRealm"
               connectionURL="ldap://pdc.domain.local:389"
               alternateURL="ldap://bdc.domain.local:389"
               connectionName="CN=tomcat,OU=Services,DC=domain,DC=local"
               connectionPassword="qwerty"
               referrals="follow"
               userBase="OU=someou,DC=domain,DC=local"
               userSearch="(sAMAccountName={0})"
               userSubtree="true"
               roleBase="OU=Security Groups,DC=domain,DC=local"
               roleName="name"
               roleSubtree="true"
               roleSearch="(member={0})" />

Потом я, правда, столкнулся с категорическим нежеланием 7-го tomcat'а общаться с 2012-ыми контроллерами домена. Пришлось пока SPNEGO заменить на FORM. Но в целом рецепт рабочий.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы