Модуль Apache mod_authn_socache
| Описание: | Управляет кэшем учетных данных для аутентификации, чтобы разгрузить бэкенды |
|---|---|
| Статус: | Базовый |
| Идентификатор модуля: | authn_socache_module |
| Файл исходного кода: | mod_authn_socache.c |
| Совместимость: | Версия 2.3 и более поздние |
Краткое описание
Сохраняет кэш учетных данных для аутентификации, чтобы не было необходимости в новом поиске на бэкенде для каждого запроса с аутентификацией.
Кэширование аутентификации
Некоторые пользователи, использующие более ресурсоемкую аутентификацию, такую как поиск в базе данных SQL (mod_authn_dbd), сообщили о неприемлемой нагрузке на своего поставщика аутентификации. Типичный пример — когда страница HTML содержит сотни объектов (изображения, скрипты, таблицы стилей, медиа и т. д.), и запрос на страницу генерирует сотни эффективно мгновенных запросов на аутентифицированный дополнительный контент.
mod_authn_socache предлагает решение этой проблемы, сохраняя кэш учетных данных для аутентификации.
Использование
Кэш аутентификации следует использовать в тех случаях, когда поиск для аутентификации создает значительную нагрузку на сервер или бэкенд или сеть. Аутентификация по файлу (mod_authn_file) или dbm (mod_authn_dbm) вряд ли извлекут выгоду, поскольку они сами по себе быстрые и лёгкие (хотя в некоторых случаях, например, с файлом на сетевом накопителе, кэширование может быть полезным). Другие поставщики, такие как аутентификация на основе SQL или LDAP, скорее всего, извлекут выгоду, особенно если наблюдается проблема с производительностью. Среди стандартных модулей, mod_authnz_ldap управляет собственным кэшем, поэтому только mod_authn_dbd обычно извлекут выгоду от этого кэша.
Основные правила кэширования для поставщика:
- Включите поставщика, для которого вы кэшируете, в директиве
AuthnCacheProvideFor. - Укажите socache перед поставщиком, для которого вы кэшируете, в своей директиве
AuthBasicProviderилиAuthDigestProvider.
Простой пример использования для ускорения mod_authn_dbd с использованием dbm в качестве движка кэша:
#AuthnCacheSOCache is optional. If specified, it is server-wide
AuthnCacheSOCache dbm
<Directory "/usr/www/myhost/private">
AuthType Basic
AuthName "Cached Authentication Example"
AuthBasicProvider socache dbd
AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"
AuthnCacheProvideFor dbd
Require valid-user
#Optional
AuthnCacheContext dbd-authn-example
</Directory> Кэширование с настраиваемыми модулями
Разработчики модулей должны учитывать, что их модули должны быть включены для кэширования с mod_authn_socache. Для кэширования учетных данных, которые поставщик только что просмотрел или сгенерировал, предоставляется одна необязательная функция API ap_authn_cache_store. Примеры использования см. в r957072, в котором три поставщика authn включены для кэширования.
Директива AuthnCacheContext
| Описание: | Укажите строку контекста для использования в ключе кэша |
|---|---|
| Синтаксис: | AuthnCacheContext directory|server|custom-string |
| Значение по умолчанию: | AuthnCacheContext directory |
| Контекст: | каталог |
| Статус: | Базовый |
| Модуль: | mod_authn_socache |
Эта директива определяет строку, которая будет использоваться вместе с предоставленным именем пользователя (и областью в случае аутентификации Digest) при построении ключа кэша. Это служит для разграничения идентичных имен пользователей, обслуживающих разные области аутентификации на сервере.
Два специальных значения для этого — directory, которое использует контекст каталога запроса в качестве строки, и server, которое использует имя виртуального хоста.
По умолчанию directory, что также является наиболее консервативным значением. Это, вероятно, менее оптимально, так как (например), $app-base, $app-base/images, $app-base/scripts и $app-base/media каждый имеют свой отдельный ключ кэша. Лучшей политикой является присвоение имени AuthnCacheContext для поставщика паролей: например, файл htpasswd или таблица базы данных.
Контексты могут быть объединены в разных частях сервера, где учетные данные совместно используются. Однако это может стать вектором для межсайтовых или межприложениевых проблем безопасности, поэтому эта директива не допускается в контекстах .htaccess.
Директива AuthnCacheEnable
| Описание: | Включить кеширование Authn, настроенное в любом месте |
|---|---|
| Синтаксис: | AuthnCacheEnable |
| Контекст: | конфигурация сервера |
| Статус: | Базовый |
| Модуль: | mod_authn_socache |
Эта директива обычно не требуется: она подразумевается, если кэширование аутентификации включено где-либо в httpd.conf. Однако, если она не включена нигде в httpd.conf, она по умолчанию не будет инициализирована и, следовательно, недоступна в контексте .htaccess. Эта директива гарантирует ее инициализацию, чтобы она могла использоваться в контексте .htaccess.
Директива AuthnCacheProvideFor
| Описание: | Укажите поставщика(ов) аутентификации, для которых нужно кэшировать |
|---|---|
| Синтаксис: | AuthnCacheProvideFor authn-provider [...] |
| Значение по умолчанию: | None |
| Контекст: | каталог, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Базовый |
| Модуль: | mod_authn_socache |
Эта директива указывает поставщика или поставщиков аутентификации для кэширования. Учетные данные, полученные от поставщика, не указанного в директиве AuthnCacheProvideFor, не будут кэшироваться.
Например, чтобы кэшировать учетные данные, полученные от mod_authn_dbd или от настраиваемого поставщика myprovider, но оставить те, которые получены от лёгких поставщиков, таких как поиск по файлам или dbm, в покое:
AuthnCacheProvideFor dbd myprovider
Директива AuthnCacheSOCache
| Описание: | Выберите поставщика бэкенда socache для использования |
|---|---|
| Синтаксис: | AuthnCacheSOCache provider-name[:provider-args] |
| Контекст: | конфигурация сервера |
| Статус: | Базовый |
| Модуль: | mod_authn_socache |
| Совместимость: | Дополнительные аргументы поставщика доступны в Apache HTTP Server 2.4.7 и более поздних версиях |
Это глобальное значение для выбора поставщика для кэша общих объектов, за которым следуют необязательные аргументы для этого поставщика. Некоторые возможные значения для provider-name — "dbm", "dc", "memcache" или "shmcb", каждый из которых зависит от загрузки соответствующего модуля. Если не указано, будет использоваться значение по умолчанию для вашей платформы.
Директива AuthnCacheTimeout
| Описание: | Установите время ожидания для записей в кэше |
|---|---|
| Синтаксис: | AuthnCacheTimeout timeout (seconds) |
| Значение по умолчанию: | AuthnCacheTimeout 300 (5 minutes) |
| Контекст: | каталог, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Базовый |
| Модуль: | mod_authn_socache |
Кэширование данных аутентификации может быть проблемой безопасности, хотя кэширование на короткий срок маловероятно вызовет проблему. Обычно хорошим решением является кэширование учетных данных в течение времени, необходимого для разгрузки бэкенда, но не дольше. Однако, если изменения в пользователях и паролях происходят редко, более длительное время ожидания может подойти вам. Значение по умолчанию 300 секунд (5 минут) является осторожным и достаточным для поддержания нагрузки на бэкенде, таком как dbd (SQL запросы к базе данных), низкой.
Это не следует путать с таймаутом сеанса, что является совершенно другой проблемой. Однако вы можете проверить своё программное обеспечение для управления сессиями на предмет того, могут ли кэшированные учетные данные «случайно» продлить сеанс, и иметь это в виду при настройке таймаута.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_authn_socache.html