Skip to content

Общие понятия Keycloak

Requirements

Может работать на виртуальном сервере с 2 ядрами и 4 ГБ оперативной памяти в Docker, где также запущено еще дюжина других сервисов.

Из вывода команды docker stats видно, что приложение потребляет менее 5% процессорного времени и около 650 МБ оперативной памяти при примерно трех десятках пользователей.

Выделенный SQL-инстанс, который я настроил для этого приложения (чтобы отделить базу данных пользователей от других баз данных в соответствии с хорошей практикой), использует менее 100 МБ оперативной памяти и занимает всего 0.01% процессорного времени.

Включение 2FA

Назначение роли admin и фильтр users

Подключение LDAP пользователей и групп

Основые понятия

Scopes

скоупы это контейнеры для ролей

Roles:

On Keycloak, a Role allows us to conglomerate attributes and permissions or other roles, to conveniently assign them to users or clients, even other roles, allowing inheritance

По умолчанию атрибуты КС внешним ServiceProver не передаются, т.к. это единственно логичный дефолт (там вы можете хранить кучу ПД, зарплату, адрес, что угодно. Вряд ли ты хочешь отдавать эту инфу любому 3rd party сервису типа PagerDuty, Confluence или там Lucidchart, в которые ты по SSO заходишь).

Чтобы настроить передачу атрибутов наружу, надо добавить мапперы в конкретный клиент. Создаёшь клиент ServiceDesk и говоришь что токены этого клиента могут получать инфу о таких то атрибутах в профиле

В маперах можно настроить, будет ли инфа непосредственно в токене (в случае самла это обязательно. В случае OIDC можно выбрать в каком конкретно токене id_token/access_token) или же токен будет иметь скоуп с которым можно дёрнуть /userinfo и получить инфу оттуда (/userinfo это только OIDC токены)

Case #1

как без настройки ролей и скоупов, без настройки кастомных путей авторизации со скриптами (такое тоже практиковали) - на всех условно 29 приложениях — ограничить доступ 10 локальным учёткам, чтобы входили ТОЛЬКО в одно приложение?

Решение: Сделать для федерации мэппер типа hardcoded-attribute-mapper (federated=1, например) и в дефолтный флоу аутентификации добавьте проверку наличия этого атрибута. Ну а для того самого приложения, соответственно, кастомный флоу без проверки этого атрибута

References: