В современных корпоративных информационных системах важную роль играет централизованное управление доступами и безопасная аутентификация пользователей. Рассмотрим, как настроить вход в Loginom через OpenID Connect, используя Keycloak в качестве сервера аутентификации.
Loginom широко используется в корпоративных информационных системах благодаря гибкости, богатому функционалу и широкому спектру решаемых задач. Это делает платформу ключевым инструментом для работы с данными в крупных компаниях.
Одним из критически важных аспектов корпоративных решений является безопасность. Современные IT-инфраструктуры должны соответствовать строгим требованиям информационной безопасности, обеспечивать централизованное управление доступами и поддерживать гибкие механизмы аутентификации и авторизации.
OpenID Connect (OIDC) — один из таких механизмов. Этот стандарт позволяет безопасно интегрировать Loginom в корпоративную среду, обеспечивая единый вход (SSO) и централизованное управление доступами, избавляя от необходимости хранить пароли в самой системе.
В этой статье мы покажем, как настроить вход в Loginom через OpenID Connect, используя Keycloak в качестве сервера аутентификации.
Прежде чем переходить к настройке подключения по OpenID Connect, важно разобраться с базовыми принципами аутентификации и авторизации, на которых строится управление доступом в Loginom.
Когда пользователь открывает в браузере стартовую страницу Loginom, он видит форму ввода логина и пароля.
Стандартный вход в Loginom
Аутентификация — первый шаг. После ввода логина и пароля система проверяет, действительно ли это зарегистрированный пользователь. Если проверка успешна, Loginom «узнает» пользователя и дает ему доступ к системе. Регистрация пользователя в системе — обязанность администратора Loginom, как и его блокировка при необходимости.
Авторизация — второй шаг. После подтверждения личности система определяет права пользователя: какие функции и данные ему доступны. На этом этапе формируется полная картина возможностей пользователя в Loginom, включая ограничения на доступ к определенным разделам или ресурсам. Этому способствует ролевая модель, определяемая в системе администратором платформы.
Если аутентификация отвечает на вопрос «Кто ты?», то авторизация — «Что тебе разрешено делать?».
Рассмотренный ранее механизм аутентификации и авторизации в Loginom — это стандартное решение, доступное всем пользователям серверных редакций. В этом случае учетные записи хранятся во внутреннем хранилище сервера Loginom и надежно защищены.
Однако для владельцев Enterprise-редакции Loginom доступны расширенные механизмы аутентификации:
Эти механизмы позволяют централизованно управлять доступом и гибко настраивать права пользователей в соответствии с корпоративными стандартами безопасности.
Прежде чем предоставить пользователю доступ к системе, необходимо подтвердить его личность. OpenID Connect (OIDC) решает эту задачу аутентификации.
При входе в Loginom пользователь вводит свои данные, а сервер аутентификации (например, Keycloak или Okta) проверяет их. Если аутентификация успешна, Loginom получает ID Token, который подтверждает, кто именно вошел в систему. Этот токен содержит основную информацию о пользователе и позволяет Loginom корректно определить, с каким пользователем он взаимодействует.
Стандарт OAuth 2.0 отвечает за авторизацию, позволяя приложениям получать ограниченный доступ к другим системам без передачи паролей. Например, если Loginom запрашивает доступ к данным, сервер авторизации выдает Access Token, подтверждающий, что у пользователя есть право на этот доступ.
Использование OIDC и OAuth 2.0 вместе позволяет разделить процессы аутентификации и авторизации, обеспечивая безопасный вход в Loginom.
Благодаря OpenID Loginom не хранит у себя пароли, а получает данные безопасно через стандартные API. Вместо этого:
Такие надстройки по работе с учетными записями, как обновление информации о пользователе, периодическая смена пароля, выдача временного пароля, управление сроком действия учетных записей берет на себя сервер аутентификации (Identity Provider) и администратор. Это также включает двухфакторную аутентификацию (2FA), контроль сессий пользователей и мониторинг попыток входа. Благодаря этому Loginom не приходится управлять этими процессами самостоятельно, делегируя эту часть другому специализированному инструменту и администраторам Identity Provider.
Чтобы хорошо ориентироваться в настройках OpenID в Loginom, важно знать основные термины.
Элемент | Описание |
---|---|
Пользователь | Человек, который хочет войти в систему |
Сервер аутентификации/авторизации (Identity Provider) | Система, которая управляет доступом пользователя к запрашиваемому ресурсу. Довольно часто процессы аутентификации и авторизации производятся в рамках нескольких вызовов API одной системы (например, Keycloak). Но это необязательное условие, и возможен вариант, когда это совершенно разные системы |
Scope (Область действия) | Набор разрешений, которые определяют, какие данные запрашиваются у сервера аутентификации. Например, openid , profile , folders . |
URL точки аутентификации | URL, на который перенаправляется пользователь для входа в систему после нажатия на кнопку «Войти через OpenID» |
Код авторизации | Временный код, который клиентское приложение (в данном случае им выступает Loginom) может обменять на токены |
URL запроса токена | URL, на который клиентским приложением отправляется код авторизации для получения токена доступа (Access token) |
ID токен | Результатом процесса аутентификации на основе OpenID Connect является ID токен, который передается приложению в качестве доказательства того, что пользователь прошел аутентификацию. ID token приходит вместе с токеном доступа после обмена кода авторизации |
Токен доступа (Access Token) | Токен, который подтверждает, что у клиента есть право доступа к ресурсам и содержит информацию о пользователе. Чаще всего это JWT-токен — веб-токен в формате JSON закодированный в base64. |
Claim (Клейм) | Информация записанная в Access Token в виде пары имя клейма/значение клейма, которое содержит определенную информацию о пользователе (например, name , folders , roles ). |
UserInfo Endpoint | API, через которое приложение может получить дополнительные данные о пользователе. Особенно актуально, когда пользователь новый, и система о нем еще ничего не знает. |
Поток авторизации | Схема взаимодействия пользователя, клиентского приложения (Loginom) и сервера авторизации (Keycloak) |
Схема взаимодействия выглядит следующим образом:
Более наглядно это показано на диаграмме вызовов ниже.
Поток аутентификации и авторизации в Loginom
Далее рассмотрим настройку аутентификации и авторизации в Loginom через Keycloak.
Keycloak — это мощный сервер аутентификации, поддерживающий OpenID Connect, OAuth 2.0 и SAML. Он бесплатный, активно развивается, имеет удобный веб-интерфейс и хорошо подходит для корпоративных решений.
Основные причины выбора Keycloak для интеграции:
Keycloak хорошо интегрируется с LDAP, Active Directory, Kerberos.
В рамках данной статьи при настройке входа в Loginom через OpenID Connect учитываются следующие особенности развертывания:
1. Сервер
2. Loginom
3. Сервер аутентификации (Identity Provider)
Как установить Keycloak?
См. официальную документацию: Keycloak — Getting Started.
Важно:
Версия Loginom под Linux выбрана не специально: вход по OpenID Connect поддерживается на всех операционных системах, где работает Loginom.
Для начала настроим Keycloak для работы с Loginom.
Необходимо войти в панель администрирования Keycloak под учетными данными администратора.
Вход в Keycloak
1. Создание нового Realm
Для начала создадим новый Realm (изолированную область) для Loginom.
Realm в Keycloak — это изолированная область аутентификации, в которой хранятся пользователи, роли, политики безопасности и настройки аутентификации.
Позволяет:
Каждый Realm действует независимо, что позволяет централизованно управлять доступами в разных системах.
Необходимо:
Создание Realm в Keycloak
Ввод имени Realm и сохранение в Keycloak
2. Создание Client
Далее для нашего Realm создадим новый клиент.
Client в Keycloak — это приложение или сервис, который использует Keycloak для аутентификации и авторизации пользователей.
Позволяет:
Каждое приложение, интегрированное с Keycloak (в том числе Loginom), регистрируется как Client и получает индивидуальные настройки безопасности.
Необходимо:
Создание нового клиента в Keycloak
Выбор типа клиента OpenID Connect в Keycloak
С помощью ползунка включаем аутентификацию клиента и авторизацию. А с помощью чекбоксов выбираем «Standard Flow» и отключаем «Direct access grants» (необязательно, но он для работы с Loginom использоваться не будет). С точки зрения стандарта Oauth 2.0 это «Authorization Code Flow». Используется для приложений, где требуется высокий уровень безопасности.
Выбор типа клиента OpenID Connect в Keycloak
После нажатия на кнопку «Save» создастся новый клиент для работы с Loginom.
Включение аутентификации и авторизации в настройках клиента означает, что приложение должно предъявить client_id
и client_secret
при обращении к Keycloak (помимо пользователей аутентификацию и авторизацию должен пройти сам Loginom Server).
Хоть это и не является обязательным условием, желательно подобную настройку все же осуществить как меру дополнительной защиты. После включения аутентификации и авторизации client_secret
можно будет узнать на вкладке Credentials в информации о клиенте.
Вкладка Credentials в Keycloak
Потребуется также указать «Valid redirect URIs» в секции «Access Settings» — список разрешенных URL-адресов, на которые Keycloak может перенаправлять пользователя после успешной аутентификации. Подобная настройка не допускает перехвата данных в случаях, когда злоумышленник пытается «встроиться посередине». Здесь нужно указать адрес страницы входа Loginom ({loginom_host_name}/app/
).
Далее можно выбрать тему для страницы входа в Loginom через Keycloak в секции «Login settings» (в настройках клиента проскроллить 2-3 экрана вниз) и еще раз нажать кнопку «Сохранить».
Устанавливаем тему в Keycloak
Этого минимального набора настроек клиента достаточно для работы Keycloak в связке с Loginom. При необходимости можно задать дополнительные расширенные настройки, такие как: Access Token Lifespan, ID Token Lifespan, Refresh Token Lifespan (время жизни различных видов токенов).
Настройка времени жизни токенов в Keycloak
Определим ролевую модель в Keycloak, которая должна соответствовать модели в Loginom.
Роль в Loginom (доступные функции) | Роль в Keycloak |
---|---|
Проектирование сценариев | Designer |
Просмотр сценариев | Viewer |
Администрирование | Manager |
Публикация пакетов | Publisher |
Полный доступ к файловому хранилищу | Full access to the file storage |
Доступ ко всем задачам в планировщике | Access to all tasks in the scheduler |
Необходимо:
Создаем ролевую модель в Keycloak
Создаем роль в Keycloak
Итоговый список ролей в Keycloak
В рамках этой статьи мы создадим пользователя вручную. В реальной продуктовой среде рекомендуется настроить интеграцию с корпоративными провайдерами аутентификации, такими как LDAP, Active Directory или Kerberos, если такая интеграция ещё не настроена.
Для создания пользователя необходимо:
Создаем пользователя в Keycloak
Заполняем профиль пользователя в Keycloak
Создаем пароль пользователя в Keycloak
Делаем пароль постоянным или временным
Keycloak предоставляет различные механизмы управления учетными записями, которые могут быть полезны в корпоративной среде и о которых нельзя не упомянуть из-за их взаимосвязи с входом в Loginom:
Различные опции для взаимодействия с пользователями
Keycloak позволяет настраивать дополнительные параметры пользователя, которые могут быть полезны при интеграции с Loginom.
Во вкладке «Attributes» можно добавить кастомные атрибуты. Например, атрибут folders
может содержать список папок в Loginom, к которым пользователь должен иметь доступ.
Создаем дополнительный атрибут с названиями папок в Keycloak
Однако просто добавить атрибут недостаточно — его еще нужно включить в токен и сделать доступным через «Scope». Для этого необходимо:
Создаем новый Scope
Создаем новый Scope
обязательно нажать кнопку «Save», после чего появится возможность добавления правила сопоставления (мэппинга);
на вкладке «Mappers» создать новый «Mapper», нажав на кнопку «Сonfigure a new mapper» и выбрав тип «User Attribute» — «Scope» будет связан со свойством пользовательского атрибута;
Cоздаем новый «Mapper»
Создаем Mapper для связки Scope с User Attribute
Добавляем атрибут во все токены
folders
.Раздел «Clients»
Кнопка «Add client scope»
Теперь параметр folders
будет передаваться в «ID Token», «Access Token», «UserInfo Endpoint» и сможет быть обработанным в Loginom.
На вкладке «Role mapping» можно назначить роли для пользователя, нажав на кнопку «Assign role» и выбрав доступные из списка.
Назначаем роль пользователю в Keycloak
Выбираем роль пользователя из списка
Если нужно отвязать какую-либо роль, то это делается установкой чекбокса и нажатием кнопки «Unassign».
Отвязываем роль пользователя в Keycloak
Можно немного упростить процесс с назначением ролей, задав роль по умолчанию. Например, можно установить дефолтную роль «Viewer» для всех пользователей и все новые добавленные пользователи будут получать её автоматически. Делается это в разделе «Realm settings» на вкладке «User registration» с помощью кнопки «Assign role».
Определяем роль по умолчанию в Keycloak
5.3 Установка двухфакторной аутентификации
Для дополнительной защиты можно включить двухфакторную аутентификацию, требующую ввода временного одноразового кода при каждом входе в Loginom.
Это необязательная настройка, но если в компании есть соответствующие требования по информационной безопасности, — необходимо будет реализовать.
В Keycloak есть разные штатные средства для реализации двухфакторной аутентификации:
В рамках данной статьи рассмотрим настройку OTP через мобильное приложение, а с другими методами можно ознакомиться в официальной документации Keycloak.
Процесс выглядит следующим образом:
Настраиваем OTP через мобильное приложение в Keycloak
QR код при первом входе в Loginom
пользователь сканирует QR-код в приложении-аутентификаторе (Google Authenticator, FreeOTP, Authy) и добавляет Loginom в список аутентификаторов;
при каждом последующем входе в Loginom пользователь вводит логин, пароль и одноразовый код из мобильного приложения.
Пользователь вводит логин и пароль при входе в Loginom
Пользователь вводит одноразовый пароль при входе в Loginom
Как работает OTP?
На этом с настройкой Keycloak мы закончили. Переходим к настройкам Loginom.
Если на предыдущем шаге всё было сделано правильно, то данная настройка будет осуществлена значительно проще и быстрее.
Чтобы настроить вход через OpenID, необходимо зайти под учетной записью администратора и на вкладке «Параметры» указать настройки в группе OpenID.
Настройка параметров OpenID в Loginom
В таблице ниже указаны параметры, их описание и мэппинг с Keycloak.
Параметр | Описание | Мэппинг с Keycloak |
---|---|---|
Текст кнопки входа | Текст, который отображается на кнопке входа по OpenID | - |
Адрес клиента | URL, на который Keycloak будет возвращать ответ после аутентификации. Как правило, это URL стартовой страницы Loginom | Должен совпадать с «Valid redirect URIs», указанными в настройках клиента в Keycloak |
Идентификатор клиента | Уникальный идентификатор клиента (client_id ) | Название клиента OpenID Connect в Keycloak. В рамках данного примера — «LoginomClient» |
Ключ клиента | Секретный ключ клиента (client_secret ). Используется для аутентификации Loginom при запросе токенов | Можно посмотреть во вкладке «Credentials» в настройках клиента Keycloak. Строка «Client secret» |
URL точки аутентификации | URL, на который Loginom перенаправляет пользователя для прохождения аутентификации | Формат:{host_name}/realms/{realm_name}/ protocol/openid-connect/auth |
URL запроса токена | URL, по которому Loginom запрашивает Access Token и ID Token | Формат:{host_name}/realms/{realm_name}/ protocol/openid-connect/token |
URL запроса информации о пользователе | URL, по которому Loginom запрашивает дополнительные данные о пользователе | Формат:{host_name}/realms/{realm_name}/ protocol/openid-connect/userinfo |
Область действия | Набор разрешений, определяющих, какие данные о пользователе будут запрашиваться | По умолчанию — openid , profile . В данном примере также используется дополнительный атрибут folders , настроенный в Keycloak |
Клейм имени пользователя | Ключ токена, содержащий логин пользователя | «Username» |
Клейм полного имени пользователя | Полное имя пользователя, которое будет отображаться в профиле Loginom | «First name» или «Last name» |
Клейм списка ролей | Ключ токена, содержащий список ролей пользователя | Обычно realm_access.roles |
Роль нового пользователя | Роль, которая будет назначена пользователю по умолчанию, если в токене отсутствует список ролей | Мы настроили дефолтную роль в Keycloak, данная настройка не потребуется |
Список имен ролей | Соответствие ролей Loginom ролям, определённым в Keycloak | Мэппинг с ролями в Keycloak (пример на изображении ниже) |
Клеймы, извлекаемые в переменные | Список клеймов, разделённых запятой, значения которых передаются в сценарии на порт «Переменные сессии» | - |
Клейм списка общих папок | Ключ токена, содержащий список директорий, к которым у пользователя есть доступ | Значение атрибутов folders в Keycloak |
Автоматическое получение токена | Если включено (true ), пользователь будет автоматически перенаправлен на страницу ввода логина и пароля, без необходимости нажимать кнопку «Войти через OpenID» | - |
Обновлять роль пользователя | Если включено, Loginom будет обновлять роли и доступы пользователя при каждом входе. Если отключено, роли и права доступа обновляются только при первом входе, а дальнейшие изменения администратор должен вносить вручную | - |
Разрешать вход пользователям без роли | Позволяет входить пользователям, у которых не указана ни одна роль в токене. Если отключено, такие пользователи не смогут войти в систему | - |
Сопоставление ролей Loginom и Keycloak производится с помощью графического редактора:
Сопоставление ролей Loginom и Keycloak
URL точек аутентификации, авторизация и дополнительных данных о пользователях можно посмотреть в настройках Keycloak в разделе Realm Settings -> General -> OpenID Endpoint Configuration.
После ввода настроечных параметров появится возможность входа в Loginom через OpenID.
Вход в Loginom через OpenID
При нажатии кнопки происходит перенаправление на вход через Keycloak.
Перенаправление на вход через Keycloak
Теперь можно ввести значения логина и пароля (из Keycloak), после чего произойдет вход в Loginom.
Можно сделать еще одну настройку и убрать стандартный вход в Loginom. В этом случае пользователь будет сразу переводиться на страницу входа Keycloak. Для этого нужно отредактировать файл конфигурации server.json
(в моем случае он располагается по пути: /var/www/loginom
), добавив следующую строчку: "openid": "force"
.
Пример:
{
"wsport": null,
"host": null,
"openid": "force"
}
Теперь пользователю недоступна стандартная страница входа в Loginom и при входе он сразу перенаправляется на страницу входа Keycloak.
Пользователь получит доступ только к тем папкам, что были указаны в настройках Keycloak, и ему доступны те действия, что были определены в ролевой модели.
Пользователь получит доступ только к разрешенным в Keycloak папкам
Если вы следовали указанным настройкам, то при смене роли в Keycloak (например, на администратора) изменения автоматически применятся при следующей аутентификации пользователя.
Назначаем роль администратора в Keycloak
Назначаем роль администратора в Keycloak
Аналогично работает добавление новых доступных пользователю папок.
Добавление доступа к папкам в Keycloak
Отображаются только доступные папки в Loginom
После настройки OpenID Connect аутентификация и авторизация в Loginom через Keycloak будет работать по следующему сценарию:
Передаем управление профилем из Loginom в Keycloak
Если по каким-либо причинам требуется отключить вход в Loginom с помощью OpenID, то можно в панели администрирования очистить содержимое client_id. Отключение входа произойдет автоматически.
Если до этого редактировался файл конфигурации server.json
, то предварительно потребуется вернуть его в исходное состояние, убрав строку "openid": "force"
.
Настройка OpenID Connect в Loginom через Keycloak позволяет централизованно управлять пользователями, обеспечивая безопасный и удобный вход. Теперь не нужно вручную создавать и настраивать учетные записи — все права и доступы обновляются автоматически, а пользователи могут входить в систему по корпоративным учётным данным.
Дальнейшие шаги:
Если в процессе интеграции возникли вопросы, всегда можно заглянуть в документацию Keycloak.
Дополнительные материалы:
Как избежать проклятий: правильная организация сценариев в Loginom