Как использовать защиту htpasswd в Tomcat?
-
09-09-2019 - |
Вопрос
Я уже создал файл базы данных пользователей с помощью команды Apache htpasswd.Этот файл теперь используется несколькими другими приложениями, такими как Apache и Subversion.
Пользователи в создаются следующим образом:
htpasswd /path/to/users.htpasswd peter
Этот пользовательский файл является глобальным, а не отдельным каталогом.
Как я могу заставить Tomcat 6 использовать этот же файл в качестве области безопасности?
Решение
Есть два варианта:
Используйте Apache в качестве внешнего интерфейса для Tomcat (используя mod_jk или mod_proxy_ajp), и Apache выполнит аутентификацию.Вы можете найти подробную информацию о том, как это сделать здесь
Если вы хотите, чтобы кот выполнил аутентификацию, вам не нужно использовать что-то еще, кроме файла htpasswd.Существует 4 способа сохранить учетные данные пользователей — с использованием базы данных, JNDI/LDAP, XML-файла или поставщика JAAS.Обо всех вариантах вы можете прочитать в разделе Практическое руководство по настройке области.
Другие советы
Наиболее похожим на htpasswd может быть ПамятьОбласть.У меня самого были проблемы с поиском простого примера его использования, поэтому я опубликую здесь простой пример кода:
Настройте роль, имя пользователя и пароль в tomcat-users.xml.
Ваш 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>
Добавьте это в свой файл server.xml:
<Realm className="org.apache.catalina.realm.MemoryRealm"></Realm>
Чтобы защитить доступ к вашему веб-приложению 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
.Коллекция веб-ресурсов определяет части нашего приложения, требующие аутентификации.А/*
указывает, что все приложение требует аутентификации.Ограничение аутентификации определяет роль, которую должен иметь пользователь для доступа к защищенным ресурсам.Транспортная гарантия ограничения пользовательских данных может быть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.
Например, чтобы добавить роль менеджера-gui пользователю с именем tomcat
с паролем s3cret
, добавьте следующее в файл конфигурации, указанный выше:
<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
Затем вы можете получить доступ к своему менеджеру веб-приложений из /manager/html
(например.перезагрузка после изменения конфигурации).
Читать далее: Приложение Manager: инструкции.
Затем перезапустите Tomcat, и при доступе к вашему веб-приложению он должен запросить у вас правильные учетные данные.
Смотрите также:
- Базовая HTTP-аутентификация в Java на сайте Oracle
- Указание механизма аутентификации в Java на сайте Oracle
- Практическое руководство по настройке области на сайте Apache Tomcat
- Настройка ролевой безопасности в Tomcat
- Как использовать базовую аутентификацию с Tomcat?