Apache, OpenID · 8 min read · Dec 27, 2025
Установка и настройка модуля Apache для аутентификации OpenID
Модуль Apache для аутентификации OpenID
OpenID — это широко используемая технология для аутентификации пользователей в веб-приложениях. Она основывается на концепциях распределенной аутентификации пользователей в блог-приложениях. Этот небольшой кулинарный рецепт объясняет шаг за шагом, как установить и настроить модуль Apache mod_auth_oid с открытым исходным кодом.
Предназначение этого модуля — предоставить простую реализацию доверяющей стороны, которая может использоваться для защиты доступа к веб-приложениям и ресурсам на базе Apache. Модуль не реализует все функции, описанные в официальной спецификации. Тем не менее, его возможности уже достаточно зрелы, чтобы обеспечить удобство входа для ваших приложений и пользователей.
Также включены два дополнительных модуля, которые расширяют модуль аутентификации возможностью сопоставления идентификаторов пользователей с локальными пользователями не только через конфигурацию Apache, но и с помощью локального файла сопоставления (который может уже существовать от других приложений) или через Ldap.
Предупреждение о безопасности: Модуль не поддерживает расширения протокола, такие как PAPE. Поэтому использование в средах с более высокими требованиями к защите данных, таких как здравоохранение или денежные транзакции, не рекомендуется.
Установка
Предварительные требования
Для установки этого модуля Apache необходимо выполнить следующие требования:
- Apache 2.2, включая mod_ssl, mod_proxy, mod_include, заголовочные файлы и apxs/apxs2 (часто упоминается как пакеты apache2 и apache2-devel).
- Модуль Apache mod_parp для разбора параметров. Получите его отсюда. Установка проста: используйте sudo или войдите как root:
$ tar xvBzf mod_parp-0.10-src.tar.gz $ cd mod_parp-0.10 $ sudo apxs2 -i -c apache2/mod_parp.c $ sudo chmod 755 /usr/lib64/apache2/mod_parp.so
Основной модуль
Скачайте и распакуйте исходный код отсюда.
$ tar xvBzf mod_auth_oid-2.0-src.tar.gz
$ cd mod_auth_oid-2.0
$ sudo apxs2 -i -c -I . -D AOID_MOD_EXT_HOOKS apache2/mod_auth_oid.c -lcrypto -lparp*Дополнительно: Есть дополнительные модули, которые идут с исходным кодом. Если вы хотите использовать также высоко рекомендуемый дополнительный модуль mod_auth_oid_file.c или mod_auth_oid_ldap.c, пожалуйста, скомпилируйте и установите их также с помощью одной из следующих команд.*
$ sudo apxs2 -i -c -I . apache2/mod_auth_oid_file.c
$ sudo apxs2 -i -c -I . apache2/mod_auth_oid_ldap.cКонфигурация
Раздел сервера
Следующие стандартные модули Apache необходимы:
- mod_ssl (предоставляет шифровальные процедуры, используемые mod_auth_oid)
- mod_proxy (предоставляет функции для mod_auth_oid для отправки запросов к провайдерам OpenID)
- mod_include (предоставляет рендеринг страниц shtml)
Включите модули в глобальном разделе конфигурации вашего Apache. Настройте расположение файла в соответствии с вашей файловой системой. Также важно, чтобы модули загружались после mod_ssl. Поэтому поместите эти строки в конец блока LoadModule вашего Apache. Раскомментируйте последние две строки с модулями сопоставления, если вы собираетесь использовать их также. Если ваша дистрибуция имеет индивидуальный стиль для загрузки модулей, пожалуйста, сделайте это в соответствии с их инструкциями (например, поместите следующие строки в файл, который автоматически включается, если он находится в определенной директории, такой как modules-enabled или аналогичной.
LoadModule parp_module /usr/lib64/apache2/mod_parp.so
LoadModule auth_oid_module /usr/lib64/apache2/mod_auth_oid.so
# LoadModule auth_oid_file_module /usr/lib64/apache2/mod_auth_oid_file.so
# LoadModule auth_oid_ldap_module /usr/lib64/apache2/mod_auth_oid_ldap.soПопробуйте перезапустить сервер. Если модуль загружен правильно, это должно быть зафиксировано в error.log сервера:
[Sun Nov 06 12:10:59 2011] [notice] Apache/2.2.17 (Linux/SUSE) mod_ssl/2.2.17 OpenSSL/1.0.0c mod_auth_oid/2.0 настроен -- возобновление нормальных операцийРаздел VirtualHost
Теперь пришло время подготовить конкретную конфигурацию для защиты вашего приложения. Отредактируйте конфигурацию вашего VirtualHost. Конечно, это должен быть ваш https VirtualHost, так как мы имеем дело с безопасностью. И замените мой OpenID YOURNAME на ваш собственный OpenID, иначе YOURNAME может однажды украсть ваши коронные драгоценности. ;) Если вы хотите использовать Google в качестве провайдера OpenID, вам нужно будет пойти немного другим путем и добавить AOID_UserPattern, потому что Google использует подход направленной идентичности с непрозрачными OpenID для каждого сайта. В последней главе этого руководства, называемой Сужение пространства имен ваших предпочитаемых провайдеров OpenID, директива конфигурации объясняется на примере Google.
Мы предполагаем, что ресурс, который мы хотим защитить, находится по адресу /private, а обработчик аутентификации расположен по адресу /aoid. Разделы ниже прокомментированы, чтобы указать, что вам нужно сделать.
# Полная справка обо всех доступных параметрах конфигурации
# доступна по адресу: http://auth-openid.sourceforge.net/
# Осторожно: Включите на доверенных CA, поместив их в cacerts
# Свяжите их с хеш-именами, как описано в документации Apache
# http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslproxycacertificatepath
SSLProxyEngine on
SSLProxyCACertificatePath /etc/ssl/cacerts
# используйте флаг httponly, предотвращающий XSS-атаки на сессионные куки
BrowserMatch "Mozilla.*Firefox/(3|4)" HttpOnlyCookie
BrowserMatch "MSIE [6789]" HttpOnlyCookie
BrowserMatch "Opera/(10|9\.[56789])" HttpOnlyCookie
BrowserMatch Secure SecureCookie
# базовые настройки mod_auth_oid
AOID_Realm /
AOID_StartPage /private/index.html
AOID_LogLevel info
AOID_LoginPath /aoid/login
AOID_LoginSuffix .shtml
AOID_Timeout 300
AOID_CookieName AJESSIONID
# Сопоставление пользователей OpenID. Дополнительные возможности описаны
# в главе "Локальное сопоставление файлов" страницы Howtoforge
# разрешенные/известные пользователи ЗАМЕНИТЕ НА ВАШ OPENID
AOID_User http://YOURNAME.myopenid.com/ YOURNAME
# Принудительная аутентификация пользователей mod_auth_oid для следующего местоположения
AuthType OpenID
Require valid-user
# страница входа mod_auth_oid
# включите SSI для страницы входа (требуется mod_include)
Options Includes
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
Файлы
Теперь создайте директорию с именем private в DocumentRoot вашего VirtualHost, которая включает в себя контент, который вы хотите защитить. В качестве примера добавьте файл index.html, который говорит: “Да!! mod_auth_oid крут и я взломал 127.0.0.1!.
Кроме того, вам нужна страница входа в директории aoid, которая также находится в DocumentRoot. В качестве начала вы можете использовать образец страницы SHTML из директории htdocs в архиве. Просто скопируйте его также в ваши htdocs. Проверьте разрешения вновь созданных файлов, чтобы они соответствовали предпочтениям вашего веб-сервера.
Теперь вы можете снова перезапустить ваш Apache. Пожалуйста, проверьте error.log, чтобы убедиться, что все в порядке.
Проверьте вашу установку
Теперь откройте ваш браузер. Если вы все сделали правильно и ваш Apache тоже, то вы должны увидеть страницу входа, когда укажете в браузере следующий URL: https://YOURHOST/private/index.html
Выберите вашего провайдера и отправьте. Модуль перенаправит вас к вашему провайдеру, где вы войдете, и если это было успешно, вас вернут обратно в ваше частное приложение. Если вы выберете Google, просто отправьте предложенный идентификатор OP, в двух других случаях введите ваш OpenID в выделенную часть. Позже в руководстве описано более удобное решение для красивой страницы входа.
Отладка в случае, если что-то пошло не так
В маловероятном случае, если что-то не сработало, как ожидалось, у вас есть несколько указаний на то, что может быть не так в error.log вашего сервера Apache. Сообщения в журнале должны указывать, что не так. Подробный список возможных кодов ошибок и как включить более высокий уровень журнала можно найти на странице mod_auth_oid.
Дополнительные параметры
Красивый экран входа
Я предполагаю, что вы, как и я, и одно из первых, что вы хотите увидеть, это красиво оформленная страница входа в браузере. Выглядит ли что-то подобное достаточно круто для вашего вкуса.

Эта профессионально выглядящая страница входа была создана с помощью проекта с открытым исходным кодом openid-selector, который является удобным способом выбора OpenID.
После генерации страницы входа ее необходимо улучшить с помощью включаемых элементов shtml из mod_auth_oid. Я добавил часть обработки ошибок из оригинальной страницы входа в сгенерированную html-страницу из openid-selector. Мой пример настроенной страницы можно скачать здесь.
Сопоставление локальных идентификаторов пользователей
Если вы также скомпилировали модуль mod_auth_oid_file, то вы также можете сопоставить записи идентификаторов пользователей в локальном файле, вместо того чтобы добавлять их все в файл конфигурации Apache. Подробные инструкции можно найти здесь.
Прочтите следующую главу, чтобы добавить саморегистрацию пользователей с локальным сопоставлением файлов за один раз.
Самоуправление пользователей: сопоставление OpenID с локальным идентификатором пользователя
Предполагая, что у вас уже есть система управления пользователями, основанная на файлах .htpasswd Apache, вы можете использовать следующий фрагмент конфигурации, чтобы улучшить ее, чтобы пользователи могли регистрировать учетные записи OpenID к своим локальным учетным записям. Скопируйте файл file_mapper.html из архива в ваши htdocs.
# Раздел Virtual Host
AOID_File_DB /etc/apache2/mapdb
AOID_File_AdminPage /usr/local/apache2/htdocs/file_mapper.html
# Местоположение администрирования профиля
# Настройте путь к файлу в соответствии с вашим существующим файлом .htpasswd
AuthUserFile /srv/data/.htpasswd
AuthName 'Введите ваше имя пользователя: Отмените, чтобы зарегистрироваться, если у вас его нет.'
AuthType Basic
Require valid-user
SetEnvIf Request_Method POST parp
SetEnvIf Request_Method GET parp
SetHandler auth-oid-file
AOID_File_UserOnly on
Теперь mod_auth_oid_file создает файл mapdb, в котором хранит связь между учетными записями OpenID и локальными учетными записями .htpasswd.
Соображения безопасности
Документ обнаружения доверяющей стороны
OpenID рекомендует размещать Документ обнаружения доверяющей стороны, который указывает правильный адрес return_to для провайдера OpenID. Yahoo укажет ваш сайт как недоверенный, если вы не предоставите такой документ. Дополнительную информацию можно найти здесь.
Сохраните документ с именем openid.xrd в DocumentRoot вашего сайта. Содержимое должно выглядеть примерно так:
http://specs.openid.net/auth/2.0/return_to
https://YOUR_HOST_HERE/aoid/login
Документ должен быть затем указан либо путем отправки специального заголовка с каждым HTTP-ответом, либо он может быть включен в верхний уровень документа сайта.
Вариант 1: объявите его через заголовок (рекомендуется)
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
# .......
Header set X-XRDS-Location https://YOUR_HOST_HERE/openid.xrdВариант 2: объявите его в разделе head верхнего уровня html-документа
....
....Защита от атак DoS и других видов атак
Атаки DoS и межсайтовые подделки запросов являются большой проблемой сегодня. Вы можете эффективно защитить свой сайт от атак DoS с помощью другого модуля с открытым исходным кодом, называемого mod_qos. Этот модуль является швейцарским армейским ножом, когда речь идет о защите вашего сервера от различных видов атак. Модуль можно установить так же легко, как и любой другой модуль Apache. Следующий пример конфигурации показывает базовую конфигурацию, которая защищает ваш сайт от атак DoS и межсайтовых подделок запросов на странице самоуправления.
# раздел сервера
LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so
# обрабатывает соединения от до 100000 различных IP-адресов
QS_ClientEntries 100000
# разрешит только 50 соединений на IP
QS_SrvMaxConnPerIP 50
# максимальное количество активных TCP-соединений ограничено 256
MaxClients 256
# отключает keep-alive, когда 70% TCP-соединений заняты:
QS_SrvMaxConnClose 180
# минимальная скорость запроса/ответа (отказать медленным клиентам, блокирующим сервер, т.е. slowloris, удерживающим соединения открытыми без запроса чего-либо):
QS_SrvMinDataRate 120 1500 400
# и ограничить заголовок и тело запроса (осторожно, это ограничивает загрузки и POST-запросы тоже):
QS_SrvMaxConnClose 70%
LimitRequestFields 30
QS_LimitRequestBody 102400
QS_ClientEventBlockCount 20 300
QS_SetEnvIfStatus 400 QS_Block
QS_SetEnvIfStatus 401 QS_Block
QS_SetEnvIfStatus 403 QS_Block
QS_SetEnvIfStatus 404 QS_Block
QS_SetEnvIfStatus 405 QS_Block
QS_SetEnvIfStatus 406 QS_Block
QS_SetEnvIfStatus 408 QS_Block
QS_SetEnvIfStatus 411 QS_Block
QS_SetEnvIfStatus 413 QS_Block
QS_SetEnvIfStatus 414 QS_Block
QS_SetEnvIfStatus 417 QS_Block
QS_SetEnvIfStatus 500 QS_Block
QS_SetEnvIfStatus 503 QS_Block
QS_SetEnvIfStatus 505 QS_Block
QS_SetEnvIfStatus QS_SrvMinDataRate QS_Block
QS_SetEnvIfStatus NullConnection QS_Block
QS_SrvMaxConnExcludeIP 127.0.0.1
# Защита CSRF формы саморегистрации, установив
# четыре контрольные точки для администрирования профиля
QS_MileStone deny "^GET /OpenIdLogin"
QS_MileStone deny "^GET /OpenIDRegistration"
QS_MileStone deny "^GET /profile"
QS_MileStone deny "^POST /profile"Сужение пространства имен ваших предпочитаемых провайдеров OpenID
Вы можете ограничить, каких провайдеров OpenID вы принимаете для аутентификации вашего сайта, с помощью директивы конфигурации AOID_UserPattern. Следующие два примера дают вам общее представление о том, как составить регулярные выражения для этой цели.
# Раздел VirtualHost
# Разрешить только OpenID от Google
AOID_UserPattern "^(https://www\.google\.com/accounts/o8/id\?id=.*)$" "$1"
# Разрешить только OpenID от my.company.com и использовать только часть для сопоставления с локальным пользователем.
AOID_UserPattern "^https://my\.company\.com/([a-z]{1})[a-z]+\.([a-z]{2})[a-z]+$" "$1$2"Заключительные слова
Спасибо за чтение этого руководства. Я надеюсь, что ваша установка прошла гладко. Желаю вам, чтобы многие пользователи получили выгоду от этого модуля, и надеюсь, что вам было весело его устанавливать. Если вы хотите быть в курсе событий, происходящих с модулем, вы можете подписаться на нашу страницу mod_auth_oid в Facebook.
Get new posts in your inbox
No spam. Unsubscribe anytime.