Статья также доступна на украинском (перейти к просмотру).
Содержание:
- Концепция SSO и варианты ее реализации
- Программные средства для реализации направления Web Single Sign-on
- Развертывание Keycloak на Ubuntu 22.04 с использованием СУБД Postgresql
- Выводы
Для обеспечения безопасности учетных данных пользователей при работе с большим количеством различных сервисов на удаленных узлах сети важно организовать надежную систему аутентификации. Для этого подходит технология единого входа (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