OpenID Connect logout — Versola Docs
VersolaVersola/docs
До 1.00.7.1versola.kzGitHub

OpenID Connect logout

RP-Initiated, Front-Channel и Back-Channel Logout — что реализует Versola и как доставляется каждое уведомление.

Спецификации: RP-Initiated Logout 1.0, Front-Channel Logout 1.0, Back-Channel Logout 1.0

Эти три спецификации позволяют relying party завершить сессию пользователя у OpenID Provider, а провайдеру — известить остальных клиентов этой сессии. Versola обслуживает их в auth по адресу /logout, а edge принимает оба вида уведомлений.

Статус

Реализован. Отмечено пунктов: 16 из 18.

RP-Initiated Logout

  • GET /logout и POST /logout; end_session_endpoint есть в документе discovery по умолчанию
  • id_token_hint определяет сессию; просроченный ID token принимается
  • Запрос с cookie сессии и без hint показывает страницу подтверждения, защищённую CSRF-токеном
  • Hint, не совпадающий с сессией из cookie, никого не разлогинивает
  • post_logout_redirect_uri должен точно совпадать с одним из зарегистрированных для тенанта и отбрасывается, если нет сессии или hint, по которым его можно проверить
  • state возвращается в redirect после logout
  • ui_locales выбирает язык страницы подтверждения
  • logout_hint — не реализован

Front-Channel Logout

  • frontchannel_logout_uri регистрируется для клиента; страница logout загружает его в iframe
  • К URI добавляются iss и sid
  • frontchannel_logout_supported и frontchannel_logout_session_supported есть в документе discovery по умолчанию
  • Учёт frontchannel_logout_session_required: false — параметры сессии отправляются всегда

Back-Channel Logout

  • backchannel_logout_uri регистрируется для клиента; logout token отправляется как logout_token
  • Logout token с iss, aud, iat, exp, jti, sub, sid и событием http://schemas.openid.net/event/backchannel-logout, подписан ключом тенанта
  • Клиенты с общим endpoint получают одну доставку, а все их идентификаторы указаны в aud
  • Доставка идёт через outbox с повторами, поэтому медленный или недоступный клиент не задерживает logout пользователя
  • Событие на уровне пользователя содержит sub и toe без sid
  • backchannel_logout_supported и backchannel_logout_session_supported есть в документе discovery по умолчанию

Примечания

  • edge читает уведомление о logout из того же события и завершает соответствующие сессии; см. Edge.
  • Отзыв access token использует отдельное событие в том же back channel; см. RFC 7009.
  • Флаги discovery выше берутся из хранимого документа discovery, который оператор может редактировать; они не выводятся из настроек клиентов.

Куда смотреть

Справочник OpenAPI содержит спецификацию logout, а Edge объясняет, как edge обрабатывает уведомления.