Настройка Keycloak
Keycloak — это решение с открытым исходным для SSO. Позволяет управлять аутентификацией и авторизацией пользователей.
- Этап 1. Подготовка к установке
- Этап 2. Установка Keycloak
- Этап 3. Установка и настройка базы данных PostgreSQL
- Этап 4. Настройка конфигурационного файла Keycloak
- Этап 5. Создание сервиса автозапуска Keycloak
- Этап 6. Создание Realm
- Этап 7. Создание client
- Этап 8. Создание или синхронизация пользователей
- Этап 9. Настройка claims
- Этап 10. Завершение настройки
Этап 1. Подготовка к установке
Перед началом установки Keycloak:
- убедитесь, что на стороне вашей организации реализован LDAP;
- зарегистрируйте домен;
- выпустите сертификат TLS (например, в Let's Encrypt).
Этап 2. Установка Keycloak
- Обновите информацию о пакетах и установите обновления.
apt update && apt upgrade -y
- Установите необходимые пакеты для работы Keycloak.
apt install curl openjdk-17-jdk
- Скачайте Keycloak. Рекомендуем скачать версию 23.0.3, т. к. она наиболее стабильна по результатам тестирования.
curl -LO https://github.com/keycloak/keycloak/releases/download/23.0.3/keycloak-23.0.3.tar.gz
- Распакуйте архив.
tar -xvf keycloak-*.tar.gz
- Удалите архив.
rm keycloak-*.tar.gz
- При необходимости переместите папку с Keycloak в нужную директорию.
mv keycloak-*/ /opt/keycloak
Этап 3. Установка и настройка базы данных PostgreSQL
- Установите последнюю версию PostgreSQL из репозитория.
apt -y install postgresql
- Установите пароль для созданной учетной записи в PostgreSQL.
passwd postgres
- Подключитесь к оболочке PostgreSQL.
su - postgres psql
- Создайте базу данных keycloak.
create database keycloak;
- Создайте пользователя keycloak_user.
createuser keycloak_user
- Перейдите в psql и проверьте, успешно ли созданы база данных и пользователь.
psql \l #выводит список баз данных \du #выводит список пользователей
- В psql установите пароль для супер-пользователя баз данных и пользователя keycloak_user.
Команды должны заканчиваться символом ; .
ALTER USER postgres WITH PASSWORD 'Gfhjkm123'; ALTER USER keycloak_user WITH PASSWORD 'Gfhjkm123';
- Предоставьте пользователю keycloak_user все необходимые права и подключитесь к базе данных keycloak.
grant all privileges on database keycloak to keycloak_user; \c keycloak
- Предоставьте пользователю права доступа к схеме базы данных и выйдите из оболочки.
GRANT ALL ON SCHEMA public TO keycloak_user; \q exit
Этап 4. Настройка конфигурационного файла Keycloak
Для корректной работы приложения актуализируйте конфигурационный файл keycloak.conf. Для этого:
- Откройте конфигурационный файл Keycloak.
nano /opt/keycloak/conf/keycloak.conf
- Раскомментируйте строки и укажите нужные значения.
db=postgres db-username=keycloak_user db-password=Gfhjkm123 https-port=<номер_порта_прослушки> https-certificate-file=/путь/до/сертификат.pem https-certificate-key-file=/путь/до/ключа.pem hostname=<FQDN> #обратите внимание: нужно ввести именно полное имя домена (FQDN), по которому будет доступен keycloak
- Добавьте переменные окружения и запустите сервис.
export KEYCLOAK_ADMIN=admin export KEYCLOAK_ADMIN_PASSWORD=Gfhjkm123 cd /opt/keycloak/bin/ sudo ./kc.sh start
- После первого запуска обязательно создайте профиль администратора. Для этого войдите в консоль администратора Keycloak через веб-интерфейс, используя данные переменных из предыдущего пункта.
Этап 5. Создание сервиса автозапуска Keycloak
- Создайте сервис запуска Keycloak.
nano /lib/systemd/system/keycloak.service
- Скопируйте указанный текст в файл, сохраните его и закройте. После этого сохраните и закройте файл.
[Unit] Description=Start Keycloak After=multi-user.target [Service] Type=idle ExecStart=/opt/keycloak/bin/kc.sh start [Install] WantedBy=multi-user.target
- Предоставьте права, необходимые для работы.
chmod 644 /lib/systemd/system/keycloak.service
- Обновите конфигурацию.
systemctl daemon-reload
- Добавьте сервис в автозагрузку.
systemctl enable keycloak.service
После запуска сервис будет доступен по адресу, который указан в конфигурации.
Этап 6. Создание Realm
Realm — это рабочее пространство Keycloak, в котором происходит управление набором пользователей, учетных данных, ролей и групп.
Создайте новый Realm. Для этого:
- Перейдите в панель администратора Keycloak и авторизуйтесь под учетной записью администратора. Для авторизации используйте данные из ранее заданных переменных (на этапе 4).
- В левом верхнем углу нажмите на выпадающий список и выберите Create Realm.
-
В появившемся поле Real name укажите имя для Realm.
-
Нажмите Create.
Этап 7. Создание client
Client — это приложение, которое будет обрабатывать аутентификацию пользователей.
- Перейдите в созданный Realm и на панели слева выберите раздел Clients.
- Нажмите Create client.
- В появившемся поле укажите Client ID (идентификатор, который будет передаваться в сервис в ID-токене). Сохраните этот идентификатор, он понадобится для завершения настроек на стороне сервиса (на этапе 10).
- Нажмите Next.
-
Включите следующие параметры:
-
Client authentication;
-
Authorization;
-
Implicit Flow;
-
Standard flow.
-
- Нажмите Next.
-
Если Keycloak настраивается для облачной версии сервиса:
-
В поле Valid redirect URLs введите адреса:
-
https://auth-gateway.kontur.ru/login/callback;
-
https://auth-gateway.testkontur.ru/login/callback.
-
-
В поле Home URL введите адрес вашего пространства в сервисе в формате https://%SPACE%.ktalk.ru/ .
Где посмотреть адрес, см. в статье Частые вопросы.
-
-
Если Keycloak настраивается для серверной версии (On-premise):
- Нажмите Save.
-
В блоке Login settings → Login theme выберите keycloak или кастомную тему.
-
Нажмите Save.
Этап 8. Создание или синхронизация пользователей
Добавьте в Keycloak пользователей, которые будут работать с сервисом. Это можно сделать одним из способов:
Создать вручную
Подходит, если в организации не используется LDAP или если нужно протестировать серверную версию (On-premise).
Чтобы создать пользователя, выполните следующее:
- Перейдите в раздел Users.
- Нажмите Add user.
- Заполните поля Username, Email, First name и Last name.
-
Нажмите Create.
-
Перейдите в раздел Users и нажмите на созданного пользователя.
-
В открывшемся окне перейдите на вкладку Credentials и укажите пароль для пользователя.
В claim (атрибуте) sid нужно передавать уникальный идентификатор пользователя. Мы рекомендуем передавать идентификатор, который Keycloak сгенерировал автоматически.

Для этого:
- Перейдите в раздел Client Scopes.
- Нажмите Create client scope.
- Укажите в поле Name значение атрибута sid.
- Нажмите Save.
- Перейдите на вкладку Mappers и нажмите Configure a new mapper.
-
В поле Mapper type выберите User Property.
-
В поле Name укажите значение «sid».
-
В поле Property укажите значение «id».
- В поле Token Claim Name укажите значение «sid».
-
На левой панели перейдите в раздел Clients и выберите ранее созданный client (на этапе 7).
-
Перейдите на вкладку Client scopes и нажмите Add client scope.
- Выберите созданный sid, нажмите Add и выберите тип Default.
Keycloak готов к интеграции с облачной версией.
Синхронизировать данные с Active Directory (LDAP)
Подходит, если нужно перенести данные пользователей из Active Directory (LDAP) в Keycloak.
Чтобы настроить синхронизацию, выполните следующее:
- На панели слева выберите User federation.
- Нажмите Add Ldap providers.
- В поле UI display name укажите имя поставщика в формате any_name .
-
В поле Vendor укажите имя поставщика Active Directory.
- В блоке Connection and authentication settings заполните следующие поля:
- Connection URL: укажите адрес сервера LDAP: ldap://
. -
Bind type: выберите simple.
- Bind DN: укажите путь до записи LDAP-администратора (например, cn=admin,dc=domain,dc=ru).
- Bind credentials: введите пароль LDAP-администратора.
- Connection URL: укажите адрес сервера LDAP: ldap://
- В блоке LDAP searching and updating заполните следующие поля:
-
Edit mode: укажите значение «WRITABLE».
- Users DN: укажите путь до каталога с пользователями (например, ou=office,dc=domain,dc=ru).
- Username LDAP attribute: выберите LDAP-атрибут. Он будет использоваться как имя пользователя в Keycloak. По умолчанию установлено значение cn.
-
RDN LDAP attribute: cn.
-
UUID LDAP attribute: укажите уникальный идентификатор (например, uidNumber).
- User object classes: укажите «inetOrgPerson».
-
Search: укажите Subtree.
-
- В блоке Synchronization settings включите все параметры и укажите периодичность синхронизации.
- В блоке Advanced settings включите параметры Validate password policy и Trust email.
- Нажмите Save.
- Перейдите на вкладку Mappers и укажите наименования атрибутов:
Наименования атрибутов указаны ниже в качестве примера. В вашей базе данных наименования могут отличаться от предложенных.
При указании атрибутов соблюдайте соответствие: User Model Attribute — название атрибута в Keycloak, LDAP Attribute — название атрибута в LDAP.-
Выберите mail. В поле User Model Attribute укажите значение «email», в поле LDAP Attribute укажите значение «mail».
-
Нажмите Save.
-
Выберите first name. В поле User Model Attribute укажите значение «firstName», в поле LDAP Attribute укажите значение «givenName».
-
Нажмите Save.
-
Нажмите last name. В поле User Model Attribute укажите значение «lastName», в поле LDAP Attribute укажите значение «sn».
-
Нажмите Save.
-
- Проверьте доступность LDAP в Keycloak. Для этого перейдите в раздел Users, в поле поиска введите символ * (звездочку) и нажмите Enter.
Если пользователи появились, значит настройка выполнена успешно. Если не появились — проверьте доступность домена и правильность указанных данных.
В Keycloak пользователи смогут авторизоваться под учетной записью, указанной в LDAP. Логин имеет вид login@domain.ru.
Этап 9. Настройка claims
Установите соответствия для claims (атрибутов).
Наименования атрибутов (claims) указаны ниже в качестве примера. В вашей базе данных наименования могут отличаться от предложенных.
Обязательные claims:
- email: email;
- surname: family_name;
- firstname: given_name.
Дополнительные claims (рекомендуемые):
- post: title;
- phone: phone_number;
- picture: picture.
Сервис установит аватар пользователя, только если в атрибуте picture передать ссылку на изображение. Передача самого файла не поддерживается.
Этап 10. Завершение настройки
Если используете облачную версию, для завершения настройки сообщите своему специалисту по внедрению следующие данные:
- Название организации.
- Адрес вашего пространства в формате «name.ktalk.ru».
Как его узнать, см. в статье Частые вопросы. - Адрес сервера OpenID Connect в формате:
https://<ваш_домен.ru>:<port>/realms/<ваш_real_name>/.well-known/openid-configuration
(где ваш_real_name — это имя, указанное на этапе 6).
Можно предоставить дискавери-документ. Для этого в сервисе администрирования Keycloak перейдите в раздел Realm settings → General → Endpoints. Скопируйте ссылку на OpenID Endpoint Configuration и приложите в качестве адреса сервера. - Client_id.
Укажите id, который вы установили при создании client на этапе 7. - Client_secret.
Его можно найти в сервисе администрирования Keycloak → раздел Clients → выберите нужного client → Credentials → Secret.