• База знань
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Стаття також доступна російською (перейти до перегляду).

Для кого потрібен та як використовувати Keycloack

Зміст:

Щоб забезпечити безпеку облікових даних користувачів при роботі з великою кількістю різних сервісів на віддалених вузлах мережі, важливо організувати надійну систему аутентифікації. Для цього підходить технологія єдиного входу (SSO), яка дозволяє користувачеві авторизуватися лише раз для доступу до всіх сервісів. Keycloak — це один з ефективних інструментів реалізації SSO, який забезпечує централізовану аутентифікацію для різноманітних сервісів. Розглянемо можливості Keycloak та продемонструємо його розгортання на VPS-сервері Ubuntu.

Концепція SSO та варіанти її реалізації

Технологія SSO (Single Sign-On) може бути реалізована як для корпоративного використання, так і для забезпечення функцій аутентифікації у веб-додатках (Web Single Sign-on). У останньому випадку передбачається наявність єдиного центру аутентифікації або identity-провайдера, котрий надає доступ користувачеві з єдиним обліковим записом до усіх додатків.

Web Single Sign-on зазвичай реалізується на базі наступних стандартів та технологій:

  • OpenID;

  • OAuth;

  • SAML.

Стандарт OpenID визначає правила аутентифікації користувачів для децентралізованих систем та дозволяє мати єдиний пароль для всіх сторонніх сервісів, котрий передається їм центром аутентифікації по запиту. Це забезпечується завдяки генеруванню унікального користувацького ідентифікатора (токена) для вільного використання. OpenID-аутентифікація використовується у IBM, Yahoo!, Orange, Grafana та інших сервісах.

Стандарт OAuth визначає правила авторизації. Стандарт описаний у специфікаціях RFC 6749 та RFC 6750. Його особливість полягає в тому, що, на відміну від OpenID, тут не передаються облікові дані користувача сервісам, у котрих він зареєстрований. Передаються лише права на використання тих або інших можливостей веб-сервісів. Це дає можливість захистити користувача від витіку персональних даних. Протокол OAuth використовується такими сервісами, як, Instagram, Facebook, Google та багатьма іншими.

SAML (Security Assertion Markup Language) є відкритим стандартом обміну даними між identity-провайдером та сторонніми сервісами.

Найбільшу віддачу від використання вказаних технологій можна отримати лише в результаті сумісного поєднання їх можливостей. І тому, починаючи з версії OpenID 2.0 здійснювалися спроби інтеграції з протоколом OAuth за допомогою спеціального розширення.

Однак, повної інтеграції вказаних технологій вдалося досягти між наступними версіями стандартів: OpenID Connect(OIDC), OAuth 2.0 та SAML, що поєднало їх переваги та дало змогу здійснювати надійну реєстрацію, аутентифікацію та авторизацію користувачів без передачі облікових даних стороннім сервісам.

Програмні засоби для реалізації напрямку Web Single Sign-on

На ринку програмного забезпечення існує чимало програмних засобів, котрі в тій чи іншій мірі спираються на вказані стандарти, підтримуючи концепцію SSO. Найбільш відомі з них: FusionAuth, Keycloak,  Jans, Okta та Authentik. Їх віддача, тобто, якість забезпечення надійної та безпечної роботи користувачів зі сторонніми сервісами напряму залежить від стеку протоколів, котрі вони підтримують. І тому має сенс розглядати лише ПЗ із підтримкою OpenID Connect, OAuth 2.0 та SAML. До їх числа, зокрема, відносяться FusionAuth та Keycloak, котрі, за офіційною інформацією розробників, підтримують вказаний стек протоколів та в більшій мірі орієнтовані на використання їх девелоперами.

Для їх роботи необхідний налаштований сервер та адаптер додатків.

Порівняємо основні функції вказаних програм, котрі зведені у Таблиці 1.

Таблица 1. Сравнительная черта Keycloak и FusionAuth.

Функція Keycloak FusionAuth'
Безкоштовне використання + +

Необмежена кількість користувачів та груп

+ +

Реєстрація користувачів

+ +

Аналітичні звіти

+ +

Аутентифікація для мобільних та веб-застосунків

+ +

Можливість зміни інтерфейсу форм реєстрації та входу

+ +

Пошук користувачів та сегментація

- +

Адмін-панель для управління сервером

- +

Консоль управління акаунтом користувача

+ +

Реалізація концепції єдиного входу – багато застосунків та єдиний вхід

+ +

Авторизація та дозвіл

+ +

Можливість розміщення на хості або хмарному сервісі

+ +

Використання журналу

+ +

Авторизація за допомогою соціальних мереж

+ +

Можливість налаштувати хеш паролю

+ +

Заказ функций на заказ

- +

технічна підтримка на комерційній основі

- +

Використання шаблонів електроної пошти

+ +

Ізольоване сховище даних

+ +

Інтеграція зі службами каталогів

+ +

OAuth авторизація

+ +

Управління ключами API, MFA и SSO

+ +

Виявлення brute-force атак

+ +

Періодичний випуск патчей для оновлення засобів захистута виправлення помилок

- +

За результатами розгляду вказаних у таблиці характеристик можна зробити висновок, що майже всі вони однаково підтримуються обома програмами за невеликим винятком, що в основному пов’язано із наявністю комерційної підтримки для FusionAuth. Отже, обидва засоби здатні забезпечити ефективний захист облікових даних користувачів при роботі зі сторонніми сервісами. Keycloak має значно більшу спільноту, та великий набір додаткових модулів. З його допомогою можно робити більш складні механізми аутентифікації та авторизації, але часу на інтеграцію, скоріш за все, знадобиться більше ніж при використанні FusionAuth.

Розгортання Keycloak на Ubuntu 22.04 із використанням СУБД Postgresql

Розіб’ємо процес розгортання програми на кілька етапів:

  • Підготовчі дії;

  • Розгортання та налаштування Keycloak у якості служби;

  • Розгортання та налаштування СУБД Postgresql;

  • Налаштування зв’язку між Keycloak та Postgresql.

Виконаємо по черзі кожен із вказаних етапів.

Підготовчі дії

Як завжди, перед інсталяцією нового ПЗ потрібно підготувати системне середовище для його успішного розгортання та роботи.

Оновимо індекс пакетів у відповідності зі станом репозиторію. Для цього введемо у терміналі:

$ sudo apt update

Індекс успішно оновлений.

Оскільки Keycloak створений на мові Java, він вимагає відповідного середовища. Перевіримо поточну версію Java, розгорнутої в нашій системі:

$ java -version

Як бачимо, Java-середовище відсутнє і тому оберемо останню версію програми зі списку для її встановлення. Введемо в терміналі:

$ sudo apt install openjdk-21-jre-headless

Підтвердимо виділення додаткових 205 Mb дискового простору, після чого процес інсталяції продовжиться.

 

Java-середовище було успішно розгорнуте: Setting up openjdk-21-jre-headless:amd64 (21.0.4+7-1ubuntu2~22.04) ...

Оберемо місце для скачування архіву програми. Зовнішнє ПЗ повинно знаходитися у директорії /opt. Перейдемо до неї: 

$ cd /opt

Скопіюємо із Github-репозиторію останню на сьогодні версію релізу Keycloak 26.0.2 за допомогою наступної команди:

$ sudo wget https://github.com/keycloak/keycloak/releases/download/26.0.2/keycloak-26.0.2.tar.gz

Результат:

keycloak-26.0.2.tar.gz   100%[=================>] 139.99M  9.58MB/sin 13s

Команда успішно виконана.

Розгортання та налаштування Keycloak у якості служби

Розгорнемо отриманий архів програми у поточній директорії:

$ sudo tar -xvf keycloak-26.0.2.tar.gz

 

Перейменуємо головну директорію програми:

$ mv keycloak-26.0.2 keycloak

Додамо групу для користувачів програми:

$ groupadd keycloak

Додамо користувача із ім’ям Keycloak^

$ useradd -r -g keycloak -d /opt/keycloak -s /sbin/nologin keycloak

Встановимо власника директорії програми та надамо йому дозвіл на запуск файлів програми у двійковому форматі:

$ chown -R keycloak: keycloak

$ chmod o+x /opt/keycloak/bin

Перемістимо конфігураційні файли програми з поточної директорії у директорію /etc, котра зазвичай використовується для збереження файлів конфігурації. Для цього введемо в терміналі наступні команди:

$ cd /etc

$ mkdir keycloak

$ cp /opt/keycloak/conf/keycloak.conf /etc/keycloak/keycloak.conf

Надамо службі Keycloak дозвіл на запуск файлу kc.sh:

$ chown keycloak: /opt/keycloak/bin/kc.sh

Створимо службу Keycloak у нашій системі. Для цього перейдемо до відповідної системної директорії та відредагуємо файл нової служби за допомогою редактора: 

$ cd /etc/systemd/system

$ nano keycloak.service

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

[Unit]
Description=Keycloak Authorization Server
After=network.target
 
[Service]
User=keycloak
Group=keycloak
ExecStart=/opt/keycloak/bin/kc.sh start
ExecStop=/opt/keycloak/bin/kc.sh stop
Restart=always
RestartSec=5
Environment="JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64"
[Install]
WantedBy=multi-user.target

Збережемо внесені дані (ctrl+O, Enter) та вийдемо з редактору (ctrl+X).

Для того, щоб внесені до файлу зміни почали діяти перезавантажимо основний процес програми:

$ systemctl daemon-reload

Запустимо службу за допомогою наступної команди:

$ systemctl start keycloak.service

Перевіримо її статус:

$ systemctl status keycloak.service

Результат виконання:

keycloak.service - Keycloak Authorization Server
 Loaded: loaded (/etc/systemd/system/keycloak.service; disabled; vendor preset: enabled)
 Active: active (running) since Tue 2024-10-29 17:09:39 UTC; 834ms ago

   Main PID: 2115930 (kc.sh)   Tasks: 20 (limit: 2162)  Memory: 57.1M     CPU: 1.324s  CGroup: /system.slice/keycloak.service          ??2115930 /bin/sh /opt/keycloak/bin/kc.sh start          ??2115999 /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Dkc.config.build-and-exit=true -Djava.util.concurrent.ForkJ>   Oct 29 17:09:39 dedicated systemd[1]: Stopped Keycloak Authorization Server. Oct 29 17:09:39 dedicated systemd[1]: keycloak.service: Consumed 4.401s CPU time. Oct 29 17:09:39 dedicated systemd[1]: Started Keycloak Authorization Server.

Отже, служба Keycloak успішно запущена та готова до роботи.

Розгортання та налаштування СУБД Postgresql

Keycloak вміє працювати не лише з Postgresql, а й з MySQL, але Postgresql вважається для нього стандартною, тому розглянемо налаштування Keycloak  разом з цим типом баз даних.

Перед тим як починати скачування та встановлення СУБД, встановимо клієнт postgresql, котрий реалізований на віртуальній машині Keycloak. Це можна зробити за допомогою наступної команди:

$ apt install postgresql-client-commo 

 

Клієнт успішно встановлений: Setting up postgresql-client-common (238) ...

Ще раз оновимо індекс пакетів:

$ sudo apt update

Розпочнемо процес інсталяції СУБД:

$ sudo apt install postgresql postgresql-contrib -y

 

Програма успішно розгорнута у нашій системі:

Setting up postgresql-contrib (14+238) ...
Setting up postgresql (14+238) ...

Переключимося на влаштованого користувача СУБД:

$ sudo -i -u postgres

Можна переконатися, що запрошення командної строчки змінилося:

postgres@dedicated:~$

Перейдемо у режим створення таблиць бази даних:

$ psql

Введемо наступні команди:

# CREATE DATABASE keycloak;
# CREATE USER keycloak WITH PASSWORD 'admin';
# GRANT ALL PRIVILEGES ON DATABASE keycloak TO keycloak;
# \q

Тепер СУБД готова до використання.

Налаштування зв’язку між Keycloak та Postgresql

Змінимо налаштування СУБД, встановлені за замовчуванням для можливості підключення до неї із Keycloak. Для цього відредагуємо конфігураційний файл програми під назвою pg_hba.conf:

$ cd /etc/postgresql/14/main/

 

$ nano pg_hba.conf

У розділі локального під’єднання IPv4 додамо наступну строчку:

hostall         all        <VM-IP>/32      md5

Тепер відредагуємо файл postgresql.conf таким чином, щоб СУБД мала змогу «прослуховувати» іншіхости. Для цього введемо в терміналі:

$ nano postgresql.conf

Встановимо наступне значення для параметру listen_addresses:

listen_addresses = '*'

Збережемо внесені зміни та вийдемо з редактору.

Перевіримо налаштоване з’єднання локально із Postgresql за допомогою наступної команди:

$ psql -h localhost -U keycloak -d keycloak

Результат: SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GSM_SHA384, bits: 256, compression: off)

Можна переконатися, що SSL-з’єднання налаштоване.

Тепер налаштуємо службу keycloak.service для взаємодії із СУБД:

$ cd /etc/systemd/system

$ nano keycloak.service

Додамо до файлу служби наступні строчки:

Environment="DB_VENDOR=postgres"
Environment="DB_ADDR=Postgresql_IP"
Environment="DB_DATABASE=keycloak"
Environment="DB_USER=keycloak"
Environment="DB_PASSWORD=admin"

Всі значення параметрів повинні відповідати поточній конфігурації СУБД.

Збережемо внесені зміни та вийдемо з редактору.

Після цього залишається виконати наступні команди:

$ sudo systemctl daemon-realod
$ sudo systemctl restart keycloak

У цьому разі Keycloak буде запущений у виробничому режимі.

Висновки

На завершення можна зазначити, що Keycloak є потужним та гнучким рішенням для впровадження SSO (Single Sign-On), яке успішно використовується у великих проєктах завдяки широким можливостям для управління ідентифікацією, авторизацією та інтеграцією з різними системами. Однак його налаштування потребує певних навичок та досвіду, що може стати викликом для нових користувачів. Важливий момент полягає в тому, що конфігурація Keycloak є досить складною, а документація не завжди встигає за швидким розвитком продукту, що може ускладнити процес впровадження та підтримки на початкових етапах.

Порівнюючи з FusionAuth, варто зазначити, що останній має більш дружній інтерфейс і може бути легшим для освоєння тим, хто вперше стикається з налаштуванням SSO. Водночас FusionAuth може поступатися Keycloak у функціональності та гнучкості при роботі з великими та складними проєктами, де важливо мати точні налаштування безпеки та інтеграції з різними системами.

Отже, вибір між Keycloak та FusionAuth має базуватися на потребах вашого проєкту: якщо важлива гнучкість та наявність широкого функціоналу, Keycloak стане хорошим вибором, проте якщо пріоритетом є простота налаштування та зручність роботи, FusionAuth може виявитися більш підходящим варіантом.

Підписуйтесь на наш телеграм-канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.

Дивіться наш канал Youtube на https://www.youtube.com/freehostua.

Ми у чомусь помилилися, чи щось пропустили?

Напишіть про це у коментарях, ми з задоволенням відповімо та обговорюємо Ваші зауваження та пропозиції.

Дата: 06.11.2024
Автор: Олександр Ровник
Голосування

Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:

comments powered by Disqus
navigate
go
exit
Дякуємо, що обираєте FREEhost.UA