Вопрос или проблема
Вот в чем дело,
У меня есть сервер subversion, который до сих пор был настроен на аутентификацию пользователей с помощью модуля apache2 под названием dav_svn, но теперь я хочу изменить всю структуру аутентификации, чтобы она выполнялась через Keycloak.
Часть с входом пользователей выполнена, я получаю пользователей через LDAP-запросы, где все пользователи хранятся, и для входа мне нужно только ввести имя пользователя и пароль.
Вторая часть — это авторизация, мои репозитории subversion имеют следующую структуру:
repo1
- branches
- tags
- trunk
repo 2
…
Идея заключается в том, что для repo1 существуют 2 группы: repo1_readers и repo1_committers. У читателей будет разрешение RO, а у коммитеров — RW. Конечно, эти группы должны управляться Keycloak.
Это возможно?
Может быть что-то вроде этого?
/etc/apache2/sites-available/test1.conf
OIDCClientID svn-auth
OIDCClientSecret h60EkQLgvNsYMkvtyargFqCyjDfoVxJl
OIDCRedirectURI http://localhost/repos/repo1/redirect_uri
OIDCCryptoPassphrase password
<Location /repos/repo1>
DAV svn
SVNPath /backup/svn/repos/repo1
AuthType openid-connect
Require valid-user
#RO
<Limit GET PROPFIND OPTIONS REPORT>
Require claim groups~repo1_readers
</Limit>
#RW
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require claim groups~repo1_commiters
</LimitExcept>
</Location>
Ответ или решение
Настройка прав доступа через Keycloak на сервере Apache2 является достаточно распространённой задачей, когда требуется имплементировать централизованную систему аутентификации и авторизации. В данном случае, вы хотите перенастроить сервер Subversion (SVN) для использования Keycloak в качестве источника аутентификации вместо модуля dav_svn. Это абсолютно возможно и может быть реализовано с помощью возможности интеграции OpenID Connect (OIDC) и модуля mod_auth_openidc для Apache2.
Теория
Keycloak — это инструмент для управления доступом с открытым исходным кодом, который предоставляет функции аутентификации и авторизации, такие как SSO (Single Sign-On), поддержка протоколов OAuth2.0 и OpenID Connect. Используя Keycloak, вы можете хранить и управлять пользователями и их ролями через интерфейс администратора Keycloak.
Для интеграции Apache2 с Keycloak, используется модуль mod_auth_openidc, который позволяет Apache действовать как клиент OpenID Connect, принимая и обрабатывая токены аутентификации, которые предоставляет Keycloak. После получения токена авторизации, Apache может управлять доступом к своим ресурсам, используя полученные утверждения (claims), такие как группы пользователей.
Пример
Представленный вами конфигурационный файл /etc/apache2/sites-available/test1.conf
описывает одну из возможных реализаций настройки сервера для контроля доступа к репозиториям SVN через Keycloak.
OIDCClientID svn-auth
OIDCClientSecret h60EkQLgvNsYMkvtyargFqCyjDfoVxJl
OIDCRedirectURI http://localhost/repos/repo1/redirect_uri
OIDCCryptoPassphrase password
<Location /repos/repo1>
DAV svn
SVNPath /backup/svn/repos/repo1
AuthType openid-connect
Require valid-user
# Правила для чтения
<Limit GET PROPFIND OPTIONS REPORT>
Require claim groups~repo1_readers
</Limit>
# Правила для записи
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require claim groups~repo1_commiters
</LimitExcept>
</Location>
Давайте разберем ключевые аспекты этой конфигурации:
-
Инициализация OIDC:
OIDCClientID
иOIDCClientSecret
— это идентификатор клиента и его секрет, которые выдаются при регистрации вашего приложения (в данном случае — вашего apache-сервера как клиента) в Keycloak.OIDCRedirectURI
— URI, куда будет перенаправлен пользователь после успешной авторизации через Keycloak.OIDCCryptoPassphrase
— используется для защиты данных модуля.
-
Настройка SVN:
DAV svn
иSVNPath
— указывают Apache использовать Subversion для предоставления доступа к репозиториям, находящимся по указанному пути.
-
Авторизация:
AuthType openid-connect
— определяет, что Apache будет использовать OIDC для аутентификации.Require valid-user
— указывает, что доступ к ресурсу разрешён только аутентифицированным пользователям.- Используя директивы
<Limit>
и<LimitExcept>
, вы можете управлять доступом на основе HTTP-методов, таких какGET
для чтения иPUT
,POST
и другие для записи. Require claim groups~repo1_readers
иRequire claim groups~repo1_committers
указывают на то, что авторизация будет также проверять наличие определённых ролей или групп у аутентифицированного пользователя в токене.
Применение
Для успешной реализации этой схемы, необходимо провести следующую настройку:
-
Установка и настройка Keycloak:
- Убедитесь, что Keycloak установлен и настроен. Вам необходимо создать клиентов для вашего Apache-сервера и настроить пользователей с соответствующими группами (
repo1_readers
,repo1_committers
).
- Убедитесь, что Keycloak установлен и настроен. Вам необходимо создать клиентов для вашего Apache-сервера и настроить пользователей с соответствующими группами (
-
Настройка модуля mod_auth_openidc:
- Установите модуль mod_auth_openidc на сервер Apache.
- Правильно настройте модуль с использованием конфиденциальности, заданной в Keycloak (клиент ID, секрет и другие параметры).
-
Конфигурация директивы Apache:
- Убедитесь, что файл
test1.conf
активирован и сервер Apache перезагружен после внесения изменений. - Проведите тестирование с различными группами пользователей, чтобы подтвердить, что ограничения доступа работают как ожидается.
- Убедитесь, что файл
Настройка Keycloak в связке с Apache позволяет значительно повысить гибкость управления доступом и добавляет уровень безопасности благодаря возможности центрального управления аутентификацией и авторизацией. Эта конфигурация также остается простой для администрирования, так как изменения политик безопасности можно осуществлять через интерфейс Keycloak, не внося изменений в конфигурационные файлы Apache.