Аутентификация пользователей в Tomcat#

В Tomcat существует несколько способов аутентификации пользователей. В данном разделе описаны методы аутентификации org.apache.catalina.Authenticator.

Они включают:

  • Basic;

  • Digest;

  • Client-cert.

Базовая аутентификация (Basic Authentication)#

Базовая аутентификация использует стандартный механизм HTTP Basic Authentication. Данный метод аутентификации реализован путем передачи имени пользователя и пароля в кодировке Base64. Сервер Tomcat декодирует строку Base64 и извлекает персональные данные, затем проверяет их через Realm. Если данные верны, доступ к ресурсу предоставляется. В противном случае возвращается код 401 Unauthorized.

Basic Authenticator поддерживает следующие атрибуты конфигурации:

Атрибуты конфигурации#

Атрибут

Описание

allowCorsPreflight

Разрешить запросам CORS preflight обходить аутентификацию. Допустимые значения: never, filter и always. Значение по умолчанию - never

alwaysUseSession

Использовать сессию после аутентификации пользователя. Значение по умолчанию - false

cache

Кешировать аутентифицированные Principals, если запрос является частью HTTP-сессии. Значение по умолчанию - true

changeSessionIdOnAuthentication

Определить изменения идентификатора сессии, если сессия существует на момент аутентификации пользователя. Значение по умолчанию - true

charset

Определить, будет ли HTTP-заголовок WWW-Authenticate включать параметр аутентификации charset в соответствии с RFC 7617. Допустимые значения: null, пустая строка и UTF-8. Значение по умолчанию - null

className

Использовать имя класса реализации Java

disableProxyCaching

Настроить кеширование страниц, защищенных ограничениями безопасности

securePagesWithPragma

Управлять кешированием страниц, защищенных ограничениями безопасности. Установка значения false помогает обойти проблемы кеширования в браузерах

secureRandomAlgorithm

Задать название алгоритма для создания экземпляров java.security.SecureRandom, генерирующих идентификаторы сессий. Если не указан, используется алгоритм SHA1PRNG.

secureRandomClass

Задать имя класса Java, расширяющего java.security.SecureRandom, используемого для генерации идентификаторов сессии SSO. По умолчанию — java.security.SecureRandom

secureRandomProvider

Задать название провайдера для создания экземпляров java.security.SecureRandom

sendAuthInfoResponseHeaders

Настроить возвращение данных аутентификации (удаленный пользователь и тип аутентификации) в виде заголовков ответа для перенаправленного и прокси-запроса. Значение по умолчанию - false

trimCredentials

Удалить начальные и/или конечные пробелы из проанализированных учетных данных. Значение по умолчанию — true

jaspicCallbackHandlerClass

Использовать java-класс реализации javax.security.auth.callback.CallbackHandler с JASPIC

Дайджест-аутентификация (Digest Authentication)#

Дайджест-аутентификация автоматически добавляется в любой Context, настроенный для использования. Данный метод реализован путем передачи пароля с использованием хешированных данных. Настройка происходит через конфигурационные файлы. Сервер Tomcat вычисляет ожидаемый хеш на основе своих данных (имя пользователя, пароль). Если хеш, предоставленный клиентом, совпадает с вычисленным сервером, доступ к ресурсу предоставляется. В противном случае возвращается код 401 Unauthorized.

Digest Authenticator поддерживает следующие атрибуты конфигурации:

Атрибуты конфигурации#

Атрибут

Описание

allowCorsPreflight

Разрешить запросам CORS preflight обходить аутентификацию. Значение по умолчанию — never

alwaysUseSession

Использовать сессию после аутентификации пользователя. Значение по умолчанию - false

cache

Кешировать аутентифицированные Principals, если запрос является частью HTTP-сессии. Значение по умолчанию — false

changeSessionIdOnAuthentication

Определить изменения идентификатора сессии, существующей на момент аутентификации пользователей. Значение по умолчанию — true

className

Использовать имя класса реализации Java

disableProxyCaching

Управлять кешированием страниц, защищенных ограничениями безопасности. Значение по умолчанию — true

key

Использовать секретный ключ для аутентификации дайджеста. Если не установлен, генерируется случайное значение

nonceCacheSize

Задать размер кеша для защиты от атак с повторным использованием данных. Значение по умолчанию — 1000

nonceCountWindowSize

Отслеживать окно значений счетчиков nonce. Значение по умолчанию — 100

nonceValidity

Задать время в миллисекундах, в течение которого nonce будет считаться действительным для аутентификации. Значение по умолчанию — 300000 (5 минут).

opaque

Использовать строку opaque для аутентификации. Если не установлено, генерируется случайное значение

securePagesWithPragma

Управлять кешированием страниц, защищенных ограничениями безопасности. Значение по умолчанию — false

secureRandomAlgorithm

Использовать алгоритм для создания экземпляров java.security.SecureRandom, генерирующих идентификаторы сессий. Если не указан, используется алгоритм SHA1PRNG

secureRandomClass

Задать имя класса Java, расширяющего java.security.SecureRandom, используемого для генерации идентификаторов сессии SSO. По умолчанию — java.security.SecureRandom

secureRandomProvider

Задать название провайдера для создания экземпляров java.security.SecureRandom

sendAuthInfoResponseHeaders

Настроить возвращение данных аутентификации (удаленный пользователь и тип аутентификации) в виде заголовков ответа для перенаправленного и прокси-запроса. Значение по умолчанию - false

validateUri

Проверить URI согласно требованиям RFC2617. Значение по умолчанию — true

jaspicCallbackHandlerClass

Использовать java-класс реализации javax.security.auth.callback.CallbackHandler с JASPIC

Аутентификация по клиентскому сертификату (Client-cert Authentication)#

Данный метод использует SSL/TLS клиентские сертификаты для аутентификации. Пользователь должен предоставить действительный сертификат, выпущенный доверенным центром сертификации (CA). Если сертификат действителен, сервер извлекает из него информацию о пользователе. Сервер Tomcat использует Realm для сопоставления информации из сертификата с учетной записью пользователя. Если пользователь найден и аутентификация успешна, доступ к ресурсу предоставляется. В противном случае возвращается код 403 Forbidden.

Client-cert Authenticator поддерживает следующие атрибуты конфигурации:

Атрибуты конфигурации#

Атрибут

Описание

className

Использовать имя класса реализации Java

sslClientCertHeader

Установить имя пользователя для заголовка ssl_client_cert. Значение по умолчанию - ssl_client_cert

sslClientEscapedCertHeader

Указать имя пользователя для заголовка ssl_client_escaped_cert. Значение по умолчанию - ssl_client_escaped_cert. Имеет приоритет над заголовком ssl_client_cert

sslCipherHeader

Установить имя пользователя для заголовка ssl_cipher. Значение по умолчанию - ssl_cipher

sslSessionIdHeader

Указать имя пользователя для заголовка ssl_session_id. Значение по умолчанию -ssl_session_id

sslCipherUserKeySizeHeader

Установить имя пользователя для заголовка ssl_cipher_usekeysize. Значение по умолчанию - ssl_cipher_usekeysize