OpenID Connect Session Management

Модуль OpenID Connect Session Management позволяет отслеживать состояние пользовательской сессии через OpenID Connect (OIDC) и OAuth2 и синхронизировать состояние авторизации между вашим приложением и OIDC-провайдером.

Модуль автоматически определяет, что пользователь:

  • Вошёл в систему.

  • Вышел из системы.

  • Сменил аккаунт.

Зачем это нужно:

Когда пользователь входит в ваше приложение через Softline ID, его сессия живёт в двух местах:

  • в вашем приложении — вы знаете, что он авторизован;
  • у провайдера (Softline ID) — он тоже знает, что пользователь вошёл.

Проблема в том, что эти две сессии не синхронизированы. Если пользователь:

  • нажмёт «Выйти» в другом приложении;
  • сменит аккаунт;
  • дождётся истечения сессии у провайдера,

— ваше приложение об этом не узнает. Пользователь останется «авторизованным» у вас, хотя у провайдера он уже вышел.

Модуль OpenID Connect Session Management решает эту проблему: он отслеживает состояние сессии у провайдера и сообщает вашему приложению, когда что-то изменилось.

Как выглядит работа модуля для пользователя:

  • Пользователь вошёл в ваше приложение — сессия активна.
  • Пользователь вышел из Softline ID в другой вкладке — ваше приложение автоматически разлогинивает его.
  • Пользователь сменил аккаунт — ваше приложение переавторизует его под новым аккаунтом.

Никаких «зависших» сессий и рассинхронизации.

Модуль использует два iframe:

Компонент Назначение
OP iframe Загружается со стороны OIDC-провайдера. Проверяет, активна ли сессия пользователя у провайдера.
RP iframe Загружается с вашей стороны. Периодически спрашивает OP iframe: «сессия ещё жива?» — и, если что-то изменилось, отправляет событие в ваше приложение.

Общение между iframe и приложением идёт через postMessage — стандартный механизм браузера для передачи сообщений между окнами.

Важно: ваше клиентское приложение должно быть размещено на поддомене softline.ru — то есть в том же сайте (same-site), что и login.softline.ru. Поддомены softline.com не подходят, они будут рассматриваться браузером, как сторонние (third-party), из-за чего cookies провайдера не будут передаваться.

Встроенный iframe, предоставляемый OIDC-провайдером для проверки состояния сессии.

Особенности:

  • Работает как «чёрный ящик».

  • Не требует модификации.

  • Достаточно встроить его в страницу.

Пример подключения:

<iframe
  id="op-iframe"
  src="https://login.softline.ru/openid/check_session_iframe"
  style="display:none">
</iframe>

Отдельный iframe, который:

  • Периодически проверяет состояние сессии через OP iframe.
  • Отправляет уведомления в приложение через postMessage.

Размещается внутри вашего приложения. Поставляется готовым файлом rp-iframe.html.

Что нужно интегрировать:

Компонент  Обязательность
OP iframe ✔️
RP iframe ✔️
HTTP-заголовки ✔️
Обработчик postMessage ✔️
OAuth2 callback ✔️

Минимальный flow:

  1. Пользователь авторизуется.
  2. Приложение получает session_state.
  3. Создаётся RP iframe.
  4. RP iframe проверяет сессию.
  5. При изменении сессии выполняется повторная авторизация.

Важно: ваше клиентское приложение должно быть размещено на поддомене softline.ru — то есть в том же сайте (same-site), что и login.softline.ru. Поддомены softline.com не подходят, они будут рассматриваться браузером, как сторонние (third-party), из-за чего cookies провайдера не будут передаваться.