Перейти к основному содержимому

Выход

Завершите сессию пользователя в VoxKey и верните браузер в своё приложение по OIDC RP-Initiated Logout.

1. Зарегистрируйте, куда можно вернуть пользователя​

VoxKey возвращает браузер только на адрес, который приложение зарегистрировало заранее. Незарегистрированный адрес не принимается никогда.

В админ-панели: откройте приложение → Настройки → URI возврата после выхода → добавьте адрес → Сохранить изменения.

Через Management API:

curl -X PATCH https://your-domain.com/api/v1/{realmUUID}/applications/{appId} \
-H "Authorization: Bearer $M2M_TOKEN" \
-H "Content-Type: application/json" \
-d '{"post_logout_redirect_uris": ["https://app.example.com/logout-callback"]}'

Список заменяет предыдущий целиком. Каждый элемент — полный URL.

Точное совпадение

Адрес сравнивается побуквенно: схема, хост, порт, путь, завершающий слэш. https://app.example.com/logout-callback и https://app.example.com/logout-callback/ — два разных адреса.

У машинных (M2M) приложений нет браузера, который нужно вернуть, поэтому им эта настройка не предлагается.

2. Отправьте браузер на end-session эндпоинт​

Адрес эндпоинта опубликован в discovery-документе realm'а как end_session_endpoint:

GET https://your-domain.com/oauth2/{realmUUID}/logout
?id_token_hint={id_token}
&post_logout_redirect_uri=https://app.example.com/logout-callback
&state={opaque_value}
ПараметрОбязателенСмысл
id_token_hintда, чтобы вернуться в приложениеID-токен, который VoxKey выдал этому пользователю для вашего приложения. Доказывает, какое приложение просит, и что завершается сессия именно этого пользователя.
post_logout_redirect_uriнетОдин из зарегистрированных адресов.
stateнетВернётся вам без изменений при редиректе.
client_idнетЕсли передан, должен совпадать с приложением, которому выдан id_token_hint.

Что происходит​

ЗапросРезультат
Валидный id_token_hint, зарегистрированный post_logout_redirect_uriСессия завершена, браузер возвращён на этот адрес вместе со state
Валидный id_token_hint, без post_logout_redirect_uri, зарегистрирован хотя бы один адресСессия завершена, браузер возвращён на первый зарегистрированный адрес
Валидный id_token_hint, адрес не зарегистрированСессия завершена, браузер отправлен на страницу входа realm'а; в лог пишется warning
Валидный id_token_hint, не зарегистрировано ничегоСессия завершена, браузер отправлен на страницу входа realm'а
client_id не совпадает с приложением из id_token_hintОтказ, сессия не трогается
Нет id_token_hintVoxKey не может понять, кто просит, поэтому сессию не трогает и просит пользователя подтвердить выход на странице realm'а. post_logout_redirect_uri не используется.

Последняя строка сделана намеренно: ссылка, которая завершает сессию без доказательства, — это ссылка, которую кто угодно может поставить на любую страницу. Спецификация просит провайдера в этом случае спросить пользователя, и VoxKey спрашивает.

Если что-то не так​

Пользователь всегда попадает на страницу входа VoxKey. Адрес из post_logout_redirect_uri не зарегистрирован у этого приложения или отличается от зарегистрированного (проверьте завершающий слэш и схему). VoxKey пишет об этом в лог: Logout asked for a post-logout address the client did not register.

Пользователя просят подтвердить выход. В запросе не было id_token_hint — или он выдан другим realm'ом или другому пользователю, не тому, кто сейчас вошёл. Просроченный id_token_hint принимается: он всё равно говорит, кто просит.