Как использовать защиту htpasswd в Tomcat?

Я уже создал файл базы данных пользователя с помощью команды Apache htpasswd. Этот файл теперь используется несколькими другими приложениями, такими как apache и subversion.

Пользователи в создаются так:

htpasswd /path/to/users.htpasswd peter

Этот файл пользователя является глобальным, а не для каждого каталога.

Как я могу заставить Tomcat 6 использовать этот же файл в качестве области безопасности?

3 ответа

Решение

Есть два варианта:

  1. Используйте Apache в качестве внешнего интерфейса для Tomcat (используя либо mod_jk, либо mod_proxy_ajp), и Apache выполняет аутентификацию. Вы можете найти подробности о том, как это сделать, здесь

  2. Если вы хотите, чтобы tomcat выполнял аутентификацию, вам не нужно использовать что-то другое, кроме файла htpasswd. Существует 4 способа сохранить учетные данные пользователей - с помощью базы данных, JNDI/LDAP, файла XML или поставщика JAAS. Вы можете прочитать обо всех параметрах в разделе Конфигурация области.

Чтобы обеспечить безопасный доступ к веб-приложению Tomcat, вы можете реализовать простое ограничение безопасности (например, в /var/lib/tomcat7/webapps/*/WEB-INF/web.xml) как показано ниже (просто добавьте его перед </web-app> окончание):

<!-- This security constraint protects your webapp interface. -->
<login-config>
  <!-- Define the Login Configuration -->
  <auth-method>BASIC</auth-method>
  <realm-name>Webapp</realm-name>
</login-config>
<security-constraint>
  <web-resource-collection>
    <web-resource-name>Admin</web-resource-name>
    <url-pattern>/*</url-pattern>
    <http-method>GET</http-method>
    <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>*</role-name>
  </auth-constraint>
  <!-- Specifying a Secure Connection -->
  <user-data-constraint>
    <!-- transport-guarantee can be CONFIDENTIAL (forced SSL), INTEGRAL, or NONE -->
    <transport-guarantee>NONE</transport-guarantee>
  </user-data-constraint>
</security-constraint>
<!-- Authorization, see: tomcat-users.xml --> 
<security-role>
  <role-name>*</role-name>
</security-role>

Элемент login-config содержит auth-method элемент, который определяет метод аутентификации, который мы используем, который является BASIC, security-constraint элемент содержит 3 элемента: web-resource-collection, auth-constraint, а также user-data-constraint, Коллекция web-ресурсов определяет части нашего приложения, которые требуют аутентификации. /* указывает, что для всего приложения требуется аутентификация. Ограничение auth определяет роль, которую должен иметь пользователь для доступа к защищенным ресурсам. Транспортная гарантия ограничения пользовательских данных может быть NONE, CONFIDENTIAL или же INTEGRAL, Мы установили это NONE, что означает, что перенаправление на SSL не требуется при попытке попасть на защищенный ресурс.

Также убедитесь, что у вас есть строка:

<Realm className="org.apache.catalina.realm.MemoryRealm" />

внутри вашего conf/server.xml (Engine раздел).

Если вы не изменили какие-либо файлы конфигурации, пожалуйста, проверьте файл conf/tomcat-users.xml в вашей установке (locate tomcat-users.xml). Этот файл должен содержать учетные данные, чтобы вы могли использовать веб-приложение Tomcat.

Например, чтобы добавить роль manager-gui пользователю с именем tomcat с паролем s3cretдобавьте следующее в конфигурационный файл, указанный выше:

<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>

Затем вы можете получить доступ к своему менеджеру веб-приложений из /manager/html (например, перезагрузка после изменения конфигурации).

Подробнее: Менеджер приложения HOW-TO.

Затем перезапустите Tomcat, и при доступе к вашему веб-приложению он должен запросить правильные учетные данные.

Смотрите также:

Наиболее похожим на htpasswd может быть MemoryRealm. У меня были проблемы с тем, чтобы найти простой пример, как его использовать, поэтому я опубликую простой пример кода здесь:

  1. Установите роль, имя пользователя и пароль в tomcat-users.xml

  2. Ваш web.xml должен содержать что-то вроде:

       <security-constraint>
         <web-resource-collection>
          <web-resource-name> 
            My Protected WebSite 
          </web-resource-name>
          <url-pattern> /* </url-pattern>
          <http-method> GET </http-method>
          <http-method> POST </http-method>
        </web-resource-collection>
        <auth-constraint>
        <!-- the same like in your tomcat-users.conf file -->
          <role-name> test </role-name>
        </auth-constraint>
      </security-constraint>
       <login-config>
        <auth-method> BASIC </auth-method>
        <realm-name>  Basic Authentication </realm-name>
      </login-config>
      <security-role>
        <description> Test role </description>
        <role-name> test </role-name>
      </security-role>
    
  3. Добавьте это в ваш файл server.xml:

    <Realm className="org.apache.catalina.realm.MemoryRealm"></Realm>
    
Другие вопросы по тегам