
В современных корпоративных информационных системах важную роль играет централизованное управление доступами и безопасная аутентификация пользователей. Рассмотрим, как настроить вход в 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 под учетными данными администратора.
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/).

Вход в Keycloak
Далее можно выбрать тему для страницы входа в 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» |
| Клейм полного имени пользователя | Имя поля в ответе на запрос userinfo, содержащее полное имя пользователя | «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