7. Руководство по интеграции
Ниже на практическом примере рассмотрено как встроить IDENTYX в веб-приложение. Демонстрационное приложение, на примере которого рассматривается интеграция, входит в комплект поставки IDENTYX.
Способы интеграции
IDENTYX предлагает три основных подхода к интеграции, от самого простого до наиболее гибкого:
Способ 0: Прокси, без доработок
Самый простой способ защитить приложение, не требующий изменений в его коде:
Принцип работы: IDENTYX размещает прокси-сервер перед вашим приложением, который проверяет наличие сессии пользователя
Доступ: Контролируется на уровне URL-адресов
Приложение: Не получает информации о пользователе
Способ подходит для быстрой защиты существующих приложений, если:
У вас нет возможности изменять код приложения
Требуется быстрое внедрение защиты
Достаточно простого контроля доступа по URL
Способ 1: Прокси, с доработками
Немного более сложный, но гораздо более функциональный способ:
Принцип работы: Прокси-сервер интегрируется с приложением через специальные API-вызовы
Доступ: Контролируется как на уровне URL, так и внутри приложения
Приложение: Получает информацию о пользователе и его разрешениях
Способ рекомендуется в большинстве случаев, если:
Требуется более детальный контроль доступа внутри приложения
Нежелательно реализовывать полный протокол OIDC
Приложение уже имеет некоторую логику авторизации
Способ 2: По стандарту OIDC/OAuth 2.0
Наиболее гибкий и стандартизированный подход:
Принцип работы: Прямая интеграция приложения со IDENTYX через протоколы OIDC/OAuth 2.0
Доступ: Полностью контролируется приложением
Приложение: Самостоятельно управляет всем процессом аутентификации и авторизации
Способ подходит для случаев, когда прокси-сервиса недостаточно, например:
Требуется максимальная гибкость управления сессиями
Приложение не разделено на клиент-сервер (монолит, мобильное приложение)
Используется микросервисная архитектура, не подходящая для проксирования
Способ 0: Прокси, без доработок
Это самый простой способ защиты вашего приложения.
Добавление в IDENTYX (без доработок)
Войдите в административную консоль IDENTYX (http://localhost:8090)
Перейдите в раздел "Приложения"
Нажмите "Добавить приложение"
Заполните форму:
Название: Имя вашего приложения
Порт: Порт для доступа к приложению через прокси (например, 8216)
URL приложения: Внутренний адрес вашего приложения (например, http://demo-app:80)
Настройте маршруты и правила предоставления доступа к ним
Запомните Client ID и Client Secret
Нажмите "Сохранить"
Проверка работы
Откройте приложение через прокси: http://localhost:8091 (порт 8216 отображается в 8091)
При попытке доступа к защищённым страницам вы будете перенаправлены на страницу входа
После успешной аутентификации вы получите доступ к защищённым ресурсам
Преимущество этого подхода — вам не нужно менять код приложения вообще. Достаточно настроить прокси в консоли IDENTYX.
Способ 1: Прокси, с доработками
Этот подход позволяет приложению получать информацию о пользователе и его разрешениях, что даёт возможность реализовать более детальный контроль доступа.
Добавление в IDENTYX (настройка прокси)
Порядок действий аналогичен Способу 0, однако необходимо добавить маршруты к эндпоинтам приложения, отвечающим за получение информации о начале и окончании сессии.
При этом необходимо реализовать эти два обязательных эндпоинта в приложении.
Эндпоинт /proxy/newsession
Этот эндпоинт вызывается IDENTYX при успешной аутентификации пользователя. Приложение должно извлечь и запомнить сведения о пользователе и его разрешениях.
Информация о пользователе, передаваемая от IDENTYX имеет следующую структуру:
Вот пример реализации эндпоинта на языке Python:
Эндпоинт /proxy/endsession
Этот эндпоинт вызывается при завершении сессии. Приложение должно сбросить сохраненные ранее данные о пользователе и его разрешениях.
Проверка разрешений (прокси)
Теперь вы можете проверять разрешения пользователя в любой части кода. При этом рекомендуется использовать ранее сохраненные права доступа, либо каждый раз обращаться к IDENTYX за актуальными данными пользователя.
Вызов процедуры проверки разрешения
Способ 2: По стандарту OIDC/OAuth 2.0
Это самый гибкий способ интеграции, позволяющий полностью контролировать процесс аутентификации и авторизации.
Добавление в IDENTYX (настройка OIDC)
Порядок действий аналогичен Способу 0, однако необходимо выбрать режим "Не использовать прокси".
На закладке Безопасность необходимо задать допустимый список Redirect URI, включив туда внешние URL приложения для обработки ответа после аутентификации (например, http://localhost:8081/oidc/callback)
Структура эндпоинтов сервера OIDC
Эндпоинты OIDС расположены по адресу /api/service/oidc
Например, интерфейс автообнаружения сервисов доступен на /api/service/oidc/.well-known/openid-configuration
Эндпоинт /oidc/login
Этот эндпоинт инициирует процесс аутентификации, перенаправляя пользователя на страницу входа IDENTYX:
Эндпоинт /oidc/callback
Этот эндпоинт обрабатывает ответ от IDENTYX после успешной аутентификации:
Эндпоинт /oidc/logout
Этот эндпоинт завершает сессию пользователя:
Проверка разрешений (сервер)
Проверка разрешений в режиме сервера OIDC выполняется аналогично режиму прокси. Однако, в отличие от режима прокси, необходимо самостоятельно проверять активность сессии.
API для загрузки справочников
Если приложение работает с собственными объектами (например, комнаты, документы, проекты), можно загрузить их в IDENTYX для назначения прав доступа в разрезе прикладных объектов. Можно загружать справочник организаций, объектов и действий.
Для загрузки справочников используется эндпоинт /api/service/ext-apps
Данные справочников передаются в структуре dictionaries, в виде массива структур { id, title }. Отдельно передаются справочники организаций (organizations), объектов (objects), действий (actions)
Идентификаторы объектов (поле id) имеют иерархическую структуру:
Должны начинаться с символа
/Вложенные объекты также указываются через
/Например:
/floor1/room101означает, что объект "room101" находится внутри объекта "floor1"
Рекомендации по интеграции
Особенности реализации
Не храните CLIENT_SECRET в клиентском коде (JavaScript, мобильные приложения)
Всегда проверяйте параметр state при обработке OIDC-callback для защиты от CSRF
Всегда валидируйте JWT-токены, проверяя подпись и срок действия
Храните токены безопасно, используя защищённые хранилища (например, HttpOnly cookies, Redis, зашифрованные базы данных)
Производительность
Кэшируйте результаты проверки разрешений для частых операций
Используйте refresh_token для продления сессии без повторной аутентификации
Минимизируйте запросы к IDENTYX — не проверяйте разрешения при каждом действии пользователя
Используйте готовые библиотеки для работы с OAuth 2.0, OIDC, JWT