• База знаний
  • /
  • Блог
  • /
  • 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!, Оранжевый, Grafana и других сервисах.

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

SAML (язык разметки утверждений безопасности) является открытым стандартом обмена данными между identity-провайдером и посторонними сервисами.

Наибольшую отдачу от использования указанных технологий можно получить только в результате совместного сочетания их возможностей. И потому, начиная с версии ОпенИД 2.0 предпринимались попытки интеграции с протоколом OAuth с помощью специального расширения.

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

Программные средства для реализации направления Web Single Sign-on

На рынке программного обеспечения существует немало программных средств, в той или иной степени опирающихся на указанные стандарты, поддерживая концепцию ССО. Наиболее известные из них: 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 -version

Как видим, Java-среда отсутствует и поэтому выберем последнюю версию программы из списка для ее установки. Введем в терминале:

$ sudo apt install openjdk-21-jre-headless

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

Java-среда была успешно развернута: Настройка openjdk-21-jre-headless:amd64 (21.0.4+7-1ubuntu2~22.04) ...

Выберем место для скачивания архива программы. Внешнее ПО должно находиться в директории /опт. Перейдем к ней:

$ 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^

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

Установим владельца директории программы и предоставим ему разрешение на запуск файлов программы в двоичном формате:

$ chown -R keycloak: keycloak

$ chmod o+x /opt/keycloak/bin

Переместим конфигурационные файлы программы из текущей директории в директорию /и т. д, обычно используемый для сохранения файлов конфигурации. Для этого введем в терминале следующие команды:

$ компакт-диск / и т.д.

$ mkdir плащ клавиатуры

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

Предоставим службе Keycloak разрешение на запуск файла кс.ш:

$ 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-common

Клиент успешно установлен: Настройка postgresql-client-common (238)...

Еще раз обновим индекс пакетов:

Начнем процесс инсталляции СУБД:

$ 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 = '*'

Сохраним внесенные изменения и выйдем из редактора.

Проверим настроенное соединение локально с Postgresql с помощью следующей команды:

$ psql -h localhost -U keycloak -d keycloak

Результат: SSL-соединение (протокол: TLSv1.3, шифр: TLS_AES_256_GSM_SHA384, биты: 256, сжатие: выключено)

Можно убедиться, что 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