Задать вопрос
devpav
@devpav
Full-Stack разработчик.

Как реализовать spring oauth2 OIDC backchannel logout?

Всем привет!

Мне очень нужна твоя помощь в понимании механизма работы backchannel logout OIDC.

Прочел:

https://openid.net/specs/openid-connect-backchanne...
https://docs.spring.io/spring-security/reference/s...

Из доки понятно, что сервис авторизации выдает OidcIdToken. Сервер клиент сохраняет у себя в сессии инфо (authorizedClient) и ходит/бродит к серверу авторизации с refresh token и обновляет access_token.

После чего сервис авторизации инициирует выход из системы c OidcLogoutToken и делает запрос к своим клиентам по HTTP POST /logout/connect/back-channel/{registrationId}. Инициировать выход может через "нажатие кнопки на фронте" и "по проверке валидности сессии."

Объясните, правильно ли я понял? Почему spring на стороне oauth2-authorization-server не реализовал logout handler, который мог бы отправлять запросы по ресту клиентам. И правильно ли я понял, что OidcLogoutToken нужно превратить в logout_token и отправлять на сервер клиента по url: /logout/connect/back-channel/{registrationId}?logout_token=....

На стороне сервера авторизации реализуем обход наших клиентов RestOidcLogoutHandler, а на стороне сервиса клиента добавляем:

//...
.oidcLogout { oidcLogoutSpec ->
                oidcLogoutSpec.backChannel { }
                oidcLogoutSpec.oidcSessionRegistry(redisReactiveOidcSessionRepository)
            }
//..


Любому разъяснению буду рад. У меня по этой истории очень много вопросов.

Спасибо, ребята.
  • Вопрос задан
  • 17 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
devpav
@devpav Автор вопроса
Full-Stack разработчик.
Мне пришлось на стороне поставщика OIDC (spring-oauth2-server) реализовать:

  • Session Event Management. Контроль по событиям session. (created, delete, expire)
  • При выходе пользователя или истечения действия сессия получать данные о subject и запрашивать авторизации OAuth2AuthorizationService (где хранится информация о registred-client)
  • Получать информацию об OidcIdToken / получать информацию о sid
  • Прохожу по всем авторизациям subject собирая информацию
  • После, по полученным авторизациям формиировать Jwt (logout_token) и запрашивать разлогин у клиентов по /logout/connect/back-channel/{registrationId}. Информацию о back-channel endpoint получаю из redirectUrls registredClient.
  • Так как spring предоставляет
    oidcLogoutSpec.backChannel { }
    (для oidc потребителей) то back-channel event dispatcher реализую через REST
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы