Настройка OpenID Connect Session Management
Быстрый старт
Важно: ваше клиентское приложение должно быть размещено на поддомене softline.ru — то есть в том же сайте (same-site), что и login.softline.ru. Поддомены softline.com не подходят, они будут рассматриваться браузером, как сторонние (third-party), из-за чего cookies провайдера не будут передаваться.
Шаг 1. Скопируйте RP iframe
Возьмите готовый файл rp-iframe.html и положите его в директорию public/ вашего проекта.
Этот файл не нужно модифицировать — он уже содержит всю логику опроса и отправки событий.
После скачивания разархивируйте файл.
Шаг 2. Добавьте OP iframe
Добавьте iframe в основной HTML-шаблон приложения.
Важно, страницы должны быть расположены на поддомене softline.ru; поддомен softline.com не подходит.
<iframe
id="op-iframe"
src="https://login.softline.ru/openid/check_session_iframe"
style="display:none">
</iframe>Шаг 3. Добавьте HTTP-заголовки
Для работы OP iframe нужно добавить два HTTP-заголовка (на все страницы, где размещен OP iframe).
Без них проверка сессии в современных браузерах работать не будет.
Пример на php
$response->headers->set(
'Permissions-Policy',
'ch-ua-platform=(self "https://login.softline.ru"), ch-ua-platform-version=(self "https://login.softline.ru")'
);
$response->headers->set('Accept-CH', 'Sec-CH-UA-Platform-Version');Пример на nginx
add_header Permissions-Policy "ch-ua-platform=(self \"https://login.softline.ru\"), ch-ua-platform-version=(self \"https://login.softline.ru\")" always;
add_header Accept-CH "Sec-CH-UA-Platform-Version" always;Если заголовки не добавить:
- OP iframe не сможет определить состояние сессии.
- RP iframe начнёт получать ошибки.
- синхронизация входа и выхода перестанет работать.
Шаг 4. Реализуйте сохранение session_state
При авторизации пользователя ответ провайдера может содержать параметр session_state.
В случае, если ответ на запрос валиден (state из ответа = state из запроса), и содержит session_state, то сохраните его в локальном хранилище приложения для текущего сеанса пользователя, например в сессии.
Шаг 5. Создайте RP iframe
После того как пользователь авторизовался и вы получили session_state, создайте RP iframe.
С этого момента начинается мониторинг сессии.
<iframe
id="rp-iframe"
src="/rp-iframe.html?client_id=abc123xyz&session_state=session_7f8a9b0c1d2e&op_frame_url=https://login.softline.ru/openid/check_session_iframe"
style="display:none">
</iframe>Шаг 6. Обработка событий из RP-iframe
Реализуйте прослушивание событий из RP iframe и их обработку.
Возможные события:
| События | Описание |
| oidc_session_changed | Сессия изменилась (пользователь вышел из системы, вошел под другим аккаунтом, переавторизовался, изменил состояние сессии). Реализуйте обработку события, как описано в отдельной статье. |
| oidc_session_error | Сессию не получилось проверить. Возвращается после 3ьей неуспешной попытки. Реализуйте обработку события, как описано в отдельной статье. |
Конфигурация OAuth2/OIDC
Пример конфигурации для вашего приложения:
SERVICE_CONFIG = {
client_id: "your_client_id",
client_secret: "your_client_secret",
redirect_uri: "https://yourproject.softline.ru/oauth2/callback",
host: "https://login.softline.ru",
scopes: [
"auth.data.personal.get"
],
authorize_uri: "oauth2/authorize",
token_uri: "oauth2/token",
userinfo_uri: "api/v1/auth/user",
check_session_iframe: "openid/check_session_iframe"
}