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