Разрешения KeyCloak на apache2

Вопрос или проблема

Вот в чем дело,

У меня есть сервер 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>

Давайте разберем ключевые аспекты этой конфигурации:

  1. Инициализация OIDC:

    • OIDCClientID и OIDCClientSecret — это идентификатор клиента и его секрет, которые выдаются при регистрации вашего приложения (в данном случае — вашего apache-сервера как клиента) в Keycloak.
    • OIDCRedirectURI — URI, куда будет перенаправлен пользователь после успешной авторизации через Keycloak.
    • OIDCCryptoPassphrase — используется для защиты данных модуля.
  2. Настройка SVN:

    • DAV svn и SVNPath — указывают Apache использовать Subversion для предоставления доступа к репозиториям, находящимся по указанному пути.
  3. Авторизация:

    • AuthType openid-connect — определяет, что Apache будет использовать OIDC для аутентификации.
    • Require valid-user — указывает, что доступ к ресурсу разрешён только аутентифицированным пользователям.
    • Используя директивы <Limit> и <LimitExcept>, вы можете управлять доступом на основе HTTP-методов, таких как GET для чтения и PUT, POST и другие для записи.
    • Require claim groups~repo1_readers и Require claim groups~repo1_committers указывают на то, что авторизация будет также проверять наличие определённых ролей или групп у аутентифицированного пользователя в токене.

Применение

Для успешной реализации этой схемы, необходимо провести следующую настройку:

  1. Установка и настройка Keycloak:

    • Убедитесь, что Keycloak установлен и настроен. Вам необходимо создать клиентов для вашего Apache-сервера и настроить пользователей с соответствующими группами (repo1_readers, repo1_committers).
  2. Настройка модуля mod_auth_openidc:

    • Установите модуль mod_auth_openidc на сервер Apache.
    • Правильно настройте модуль с использованием конфиденциальности, заданной в Keycloak (клиент ID, секрет и другие параметры).
  3. Конфигурация директивы Apache:

    • Убедитесь, что файл test1.conf активирован и сервер Apache перезагружен после внесения изменений.
    • Проведите тестирование с различными группами пользователей, чтобы подтвердить, что ограничения доступа работают как ожидается.

Настройка Keycloak в связке с Apache позволяет значительно повысить гибкость управления доступом и добавляет уровень безопасности благодаря возможности центрального управления аутентификацией и авторизацией. Эта конфигурация также остается простой для администрирования, так как изменения политик безопасности можно осуществлять через интерфейс Keycloak, не внося изменений в конфигурационные файлы Apache.

Оцените материал
Добавить комментарий

Капча загружается...