Настройка Keycloak

Обзор методов авторизации

Закрома.Хранение поддерживает несколько методов авторизации пользователей:

  1. file - Базовая авторизация с локальными пользователями
  2. ldap - Нативная LDAP авторизация без Keycloak
  3. keycloak - Авторизация через Keycloak (с поддержкой LDAP)

Метод авторизации: file (Базовый)

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

Настройка в конфигурации установки:

1auth: 2 type: file 3 4# Настройка локальных пользователей 5users: 6 - name: zakromaadmin 7 password: zakromaadmin 8 groups: 9 - clouduser 10 - name: user1 11 password: password1 12 groups: 13 - group1 14 - name: user2 15 password: password2 16 groups: 17 - group2

Особенности:

  • Простота настройки и управления
  • Подходит для небольших развертываний
  • Пароли хранятся в конфигурации (рекомендуется использовать хеширование)
  • Пользователи назначаются в группы для управления доступом

Метод авторизации: ldap (Нативный LDAP)

Используется для прямой интеграции с LDAP-каталогом без промежуточного Keycloak. Подходит для организаций, которые хотят использовать существующую LDAP-инфраструктуру напрямую.

Настройка в конфигурации установки:

1auth: 2 type: ldap 3 4# Настройка подключения к LDAP 5ldap: 6 # URL для подключения к LDAP серверу 7 url: "ldap://10.10.0.10:389" 8 # DN пользователя для подключения к LDAP серверу 9 bind_dn: "CN=Administrator,CN=Users,DC=zakroma,DC=local" 10 # Пароль пользователя для подключения к LDAP серверу 11 bind_password: "SuperStrongPass1234!" 12 # Фильтр для поиска пользователей по LDAP классам 13 user_filter: "(objectClass=person)" 14 # Фильтр для поиска пользователей по вхождению в LDAP группы 15 group_filter: "(objectClass=group)" 16 # Атрибут для поиска группы 17 group_name_attribute: "cn" 18 # Путь в LDAP дереве, с которого начинать поиск групп 19 group_search_dn: "ou=groups,dc=zakroma,dc=local" 20 # Атрибут имени пользователя 21 user_name_attribute: "sAMAccountName" 22 # Путь в LDAP дереве, с которого начинать поиск пользователей 23 user_search_dn: "CN=Users,DC=zakroma,DC=local" 24 # Атрибут, отвечающий за имя пользователя 25 user_firstname_attribute: "givenName" 26 # Атрибут, отвечающий за фамилию пользователя 27 user_lastname_attribute: "sn" 28 # Атрибут, отвечающий за email пользователя 29 user_email_attribute: "mail" 30 # Атрибут, в котором хранится список членств пользователя 31 membership_attribute_name: "member" 32 # Тип атрибута, определяющего членство пользователя 33 membership_attribute_type: "dn"

Особенности:

  • Прямая интеграция с LDAP без промежуточных компонентов
  • Поддержка Active Directory и OpenLDAP
  • Гибкая настройка атрибутов и фильтров
  • Подходит для корпоративных развертываний с существующей LDAP-инфраструктурой

Метод авторизации: keycloak

Используется для интеграции с Keycloak, который может работать как с внутренними пользователями, так и с LDAP-каталогами. Keycloak предоставляет дополнительные возможности управления пользователями, ролями и группами.

Варианты настройки Keycloak:

  1. LDAP с ролями - синхронизация групп LDAP с ролями Keycloak
  2. Внутренние пользователи - управление пользователями внутри Keycloak
  3. LDAP с группами - прямая синхронизация групп LDAP без создания ролей

Настройка на версии keycloak >= 19.X.X

  1. Заходим консоль администрирования keycloak. Выбираем существующий или создаём новый realm.

  2. Необходимо создать нового клиента. Переходим в Clients, в открывшимся окне нажимаем create и создаем нового Client ID с именем zakroma В новом окне настройки меняем:         - Client authentication: On         - Authorization: On - Direct Access Grants Для Keycloak 26.1 и выше

  3. Настраиваем сервисный аккаунт Clients -> Zakroma -> Service Account Roles.   Нажать Assign role -> Выбрать admin -> Assign

  4. Настраиваем маппинг для пользователей Clients -> Zakroma -> Сlient Scopes -> zakroma-dedicated . Add mapper -> By configuraton -> User Attribute.         - Mapper Type: User Attribute              - Name: username-mapper         - User Attribute: username         - Token Claim Name: username         - Claim JSON Type: String         - Add to access token: ON

  5. Realm Settings -> Keys копируем kid и pyblic_key ключа с алгоритмом RS256 в настройки установки zakroma.

  6. Clients -> zakroma -> Credentials копируем clientSecret в настройки установки zakroma.

  7. Увеличим время жизни токена. Переходим на вкладки слева Realm Settings -> Tokens. Проставим следующее значение:

    • Access Token Lifespan: 10 minute
  8. Настройка реестра пользователей

Для тестов без LDAP

Для тестового использования возможно использовать внутренний реестр пользователей keycloak, без интеграции с ldap.

Используется при хранении пользователей в LDAP-каталоге

На вкладке User Federation -> Add new provider -> ldap


Далее заполняем значения (на примере OpenLdap):

1- `Vendor: other #other если используется OpenLdap и Active Directory если Active Directory` 2- `Connection URL: ldap://openldap.openldap.svc.cluster.local:389` 3- `Bind Type: simple` 4- `Bind DN: cn=admin,dc=demo,dc=zakroma,dc=ru` 5- `Bind Credential: xxx` 6- `Edit Mode: UNSYNCED` 7- `Users DN: ou=users,dc=demo,dc=zakroma,dc=ru` 8- `Username LDAP attribute: cn` 9- `RDN LDAP attribute: cn` 10- `UUID LDAP attribute: cn` 11- `User Object Classes: person, organizationalPerson`

и нажимаем Save.

Далее создаём маппер из Ldap в Keycloak: Mappers -> Add mapper


Создаем mapper c именем role-mapper c типом role-ldap-mapper. Общая суть сводится к синхронизации групп AD с ролями пользователей в keycloak. Пример настроек: - LDAP Roles DN: ou=groups,dc=demo,dc=zakroma,dc=ru - Role Name LDAP Attribute: cn - Role Object Classes: groupOfUniqueNames - Membership LDAP Attribute: uniqueMember - Membership Attribute Type: DN - Membership User LDAP Attribute: uid - Mode: LDAP_ONLY - User Role Retrieve Strategy: LOAD_ROLES_BY_MEMBER_ATTRIBUTE - Member-Of LDAP Attribute: memberOf - ClientID: zakroma

Создаём ещё один mapper c именем username-mapper c типом user-attribute-ldap-mapper:


1- `User Model Attribute: username` 2- `LDAP Attribute: uid`

Синхронизируем пользователей.


Возвращаемся к настройкам на вкладке User Federation -> ldap -> settings и жмем на синхронизацию всех пользователей, тут должны увидеть что пользователи были добавлены.

В необходимых настройках Zakroma необходимо выставить значение свойства userRoleName в то название роли, в которая присутствует у всех нужных пользователей. Т.е. только пользователи с данной ролью смогут пользоваться системой Zakroma.

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

Создаём роли: Clients -> Zakroma -> Roles


По кнопке Create role добавить роль:         - clouduser

Создаём пользователей в Keycloak: Users -> Add user


1Username: zakromaadmin 2First name: Admin 3Last name: Zakroma

Задаём пароль: Users -> zakromaadmin -> Credentials -> Set password


        - Temporary: off

Назначаем роль: User -> zakromaadmin -> Role mapping -> Assign Role


Переключить в режим Filter by Clients -> в поиске написать “zakroma” - clouduser

Используется при хранении пользователей в LDAP-каталоге с авторизацией через группы

Этот вариант настройки позволяет использовать группы LDAP для авторизации без создания ролей в Keycloak. Пользователи авторизуются на основе принадлежности к определенным группам в LDAP.

На вкладке User Federation -> Add new provider -> ldap


Далее заполняем значения (на примере OpenLdap):

1- `Vendor: other #other если используется OpenLdap и Active Directory если Active Directory` 2- `Connection URL: ldap://openldap.openldap.svc.cluster.local:389` 3- `Bind Type: simple` 4- `Bind DN: cn=admin,dc=demo,dc=zakroma,dc=ru` 5- `Bind Credential: xxx` 6- `Edit Mode: UNSYNCED` 7- `Users DN: ou=users,dc=demo,dc=zakroma,dc=ru` 8- `Username LDAP attribute: cn` 9- `RDN LDAP attribute: cn` 10- `UUID LDAP attribute: cn` 11- `User Object Classes: person, organizationalPerson`

и нажимаем Save.

Создаём маппер групп из LDAP в Keycloak: Mappers -> Add mapper


Создаем mapper c именем group-mapper c типом group-ldap-mapper. Этот маппер синхронизирует группы LDAP с группами Keycloak. Пример настроек: - LDAP Groups DN: ou=groups,dc=demo,dc=zakroma,dc=ru - Group Name LDAP Attribute: cn - Group Object Classes: groupOfUniqueNames - Membership LDAP Attribute: uniqueMember - Membership Attribute Type: DN - Membership User LDAP Attribute: uid - Mode: LDAP_ONLY - User Groups Retrieve Strategy: LOAD_GROUPS_BY_MEMBER_ATTRIBUTE - Member-Of LDAP Attribute: memberOf - Mapped Group Attributes: cn - Drop non-existing groups during sync: ON

Создаём(если не существует) маппер атрибутов пользователя c именем username-mapper c типом user-attribute-ldap-mapper:


1- `User Model Attribute: username` 2- `LDAP Attribute: uid`

Синхронизируем пользователей и групп


Возвращаемся к настройкам на вкладке User Federation -> ldap -> settings и выполняем синхронизацию:

  1. Жмем Sync all users - синхронизируем всех пользователей
  2. Переходим в Mappers -> group-mapper -> Sync LDAP Groups to Keycloak - синхронизируем группы

Настройка Закрома.Хранение для работы с группами


Для изменения стратегии синхрониации пользоватей на конфигурацию с группами необходимо поменять переменную sync_strategy и установить корневую группу для синхронизации, как показано ниже:

1- `sync_strategy: "groups"` 2- `user_group: "zakroma-users-group"` - название группы в keycloak, и в ldap соответственно. 3- `default_admin: "zakromaadmin"` - Имя пользователя в группе zakroma-users-group , который будет назначен администратором платформы.

Только пользователи, входящие в указанную группу, смогут пользоваться системой Zakroma.