Интеграция Keycloak и FreeIPA

Оцените статью

Продолжаю проект по переводу инфраструктуры компании на RedOS и так как мы уже определились, что будем использовать FreeIPA в качестве аналога Active Directory, то следовательно следующий этап это создание единой точки входа в другие сервисы с использованием учётных данных FreeIPA.

Во многих сервисах мы можем использовать авторизацию с использованием учётных данных полученных при прямом доступе к каталогу LDAP, но иногда это становится проблемой с использованием структуры LDAP FreeIPA, так как приложение которое надо интегрировать разрабатывалось исключительно для работы с Active Directory.

Будем использовать OAuth 2.0

OAuth 2.0 — это отраслевой стандарт авторизации, позволяющий приложениям получать ограниченный доступ к пользовательским ресурсам на других сервисах без передачи логина и пароля.
Ключевая идея: вместо того чтобы давать приложению свои учётные данные, пользователь делегирует ему права через доверенного поставщика идентификации (например, Google, GitHub, Keycloak).

Соответственно, Keycloak который мы уже установили и установка описана в статье «Установка Keycloak в Ubuntu Linux 22.04«. Следовательно Keycloak будет как раз сервером авторизации OAuth 2.0, а данные пользователей будем получать из FreeIPA.

Настройка источника данных авторизации для Keycloak

В терминологии Keycloak такого рода источники данных называются «User federation» и настраиваются они очень просто.

User Federation (федерация пользователей) в Keycloak — это механизм, позволяющий подключать внешние хранилища учётных записей (LDAP, Active Directory, базы данных и др.) и использовать их в качестве источника пользователей для Keycloak. Вместо дублирования данных Keycloak «проксирует» аутентификацию и синхронизацию с внешним сервером, сохраняя централизованное управление доступом.

Если вы хоть раз настраивали интеграцию приложений с LDAP или Active Directory, то думаю вам все будет знакомо.

Нам необходимо создать новую федерацию пользователей например в основном Realm (про Realm поговорим попозже).

Настройка федерации пользователей

Указываем имя федерации, так как можем создать их несколько и тип вендора. Следом перечислю параметры на моем примере. Обратите внимание, что для этой федерации я использовал фильтр пользователей по членству в группе.

Connection URL

ldap://srv-kvm-prod-rain-01.rain.shiskitech.ru — адрес сервера LDAP используемый для подключения. Выбирайте использовать TLS или нет и можно сразу проверить подключение соответствующей кнопкой.

Настройки подключения к LDAP
  • Connection URL — адрес подключения с указанием ldap/ldaps для шифрованных или не шифрованных соединений
  • Enable StartTLS — собственно шифрование вкл/выкл
  • Остальное по умолчанию

Bind credentials

Здесь нам потребуется создать сервисного пользователя в FreeIPA с правами на чтение и указать в настройках Keycloak тип подключения, логин и пароль.

Авторизация в LDAP

Создайте непривилегированного пользователя в FreeIPA Identity Management. В моем случае я создал пользователя _keycloak типа авторизации в FreeIPA будет Simple.

Сервисный пользователь

BindDN пользователя мы можем найти через Apache Directory Studio и в моем случае получилось uid=_keycloak,cn=users,cn=accounts,dc=rain,dc=shiskitech,dc=ru.

BindDN

Естественно проверяем, что авторизация прошла успешно соответствующей кнопкой.

LDAP searching and updating

Основной блок поиска пользователей в каталоге и при необходимости обновления данных пользователей.

Фильтр пользователей LDAP

Edit mode

Устанавливаем в Read Only и нам пока не требуется возможность модификации записей в LDAP.

Users DN

Это область поиска пользователей в LDAP каталоге. Все наши пользователи в CN Users и соответственно от туда поиск и начинаем. Получается значение cn=users,cn=accounts,dc=rain,dc=shiskitech,dc=ru.

Основные атрибуты пользователей

  • Username LDAP attribute — uid
  • RDN LDAP attribute — uid
  • UUID LDAP attribute — ipaUniqueID
  • User object classes — inetOrgPerson, organizationalPerson
  • Search scope — Subtree

Единственное, что может вызвать вопросы, это User LDAP filter и вот здесь при тестировании фильтров LDAP могу порекомендовать Apache Directory Studio и так называемые быстрые фильтры.

Apache Directory Studio

В результате подбора подходящего фильтра я остановился на конструкции вида (User LDAP filter):

(&(objectclass=person)(uid=*)(memberOf=cn=_keycloak_allow,cn=groups,cn=accounts,dc=rain,dc=shiskitech,dc=ru)(objectClass=top)(!(nsaccountlock=True)))

Обратите внимание на часть (!(nsaccountlock=True)) и ее постоянно забывают, а она как раз отвечает за фильтрацию заблокированных пользователей в FreeIPA.

И наверное последнее, что стоит отметить это раздел Mapper в котором описано соотношение атрибутов Ldap и атрибутов Oauth2. В этом разделе надо изменить атрибут first name на Ldap значение givenname (по умолчанию там cn, что как-то странно).

Synchronization settings

Здесь как говорится все настраивается на вкус и цвет и я включил дополнительно периодическую полную и частичную синхронизацию.

Синхронизация данных.

Проверка работы федерации пользователей

Сохраняем данные и выполняем полную синхронизацию.

Первичная полная синхронизация.

В результате увидим, сколько пользователей добавлено, обновлено, удалено.

Результаты синхронизации пользователей.

Переходим в раздел Manage -> Users и выполняем поиск пользователя который должен быть синхронизирован с FreeIPA.

Проверка работы Keycloak

Поздравляю, если все прошло успешно, то мы можем переходить к настройке приложений для использования Keycloak как источника данных для авторизации.

Related Posts

Авторизация в Wiki Outline при помощи Keycloak

Продолжая статью «Интеграция Keycloak и FreeIPA» настроим интеграцию Wiki Outline и Keycloak. Создадим отдельный realm где информация о активных пользователях будет поступать из FreeIPA, но допустимых пользователей будем получать по…

Установка Keycloak в Ubuntu Linux 22.04

В современном цифровом мире вопросы аутентификации и авторизации пользователей выходят на первый план. Разработчикам и администраторам систем требуется надёжное, гибкое и безопасное решение для управления идентификацией — без избыточных затрат…

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

You Missed

Авторизация в Wiki Outline при помощи Keycloak

Авторизация в Wiki Outline при помощи Keycloak

Интеграция Keycloak и FreeIPA

Интеграция Keycloak и FreeIPA
Установка Keycloak в Ubuntu Linux 22.04

Установка и настройка FreeIPA-клиент в Ubuntu Linux

Установка и настройка FreeIPA-клиент в Ubuntu Linux

Установка и базовая настройка Wiki Outline

Установка и базовая настройка Wiki Outline

Snap, AppImage и Flatpak: отличия и практическое использование

Snap, AppImage и Flatpak: отличия и практическое использование