Spring SSO всегда создает новый сеанс после обновления клиентского веб-приложения - PullRequest
0 голосов
/ 15 мая 2018

Я создавал свой собственный сервер oauth2 с поддержкой единого входа для Google и Facebook. Я нашел этот пример https://github.com/spring-guides/tut-spring-boot-oauth2 очень полезным, и я смог сделать мой сервер oauth2 расширяемым после нескольких настроек.

Для хранения сессий я использовал redis, и все, кажется, работает с весенней магией.

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

Я искал решения в Интернете, но пока не повезло. Буду очень признателен, если кто-нибудь сможет мне помочь с этим вопросом.

TL; версия DR:

Я реализовал сервер oauth2 с включенным SSO для Facebook с помощью Spring Boot. После того, как я успешно вошел в систему с моей учетной записью Facebook, я могу видеть ресурсы моего клиентского веб-приложения. Каждый раз, когда я обновляю страницу, я вижу, что с сервера oauth2 создается новый сеанс, он сохраняется в хранилище redis, а все старые сеансы также хранятся в хранилище.

UPDATE

Кажется, что все новые сеансы генерируются анонимными пользователями каждый раз, когда я обновляю страницу.

1 Ответ

0 голосов
/ 15 мая 2018

Хорошо, после некоторого копания получается, что анонимный пользователь Spring Boot не сильно отличается от неаутентифицированных пользователей, согласно этому документу https://docs.spring.io/spring-security/site/docs/current/reference/html/anonymous.html.

Имеет смысл, что каждый раз, когда я обновляю страницу, новый сеансбудет генерировать.Моя проблема заключалась в том, что я не использовал правильный идентификатор сеанса при регистрации клиентского приложения после успешной аутентификации пользователя.Поэтому я переопределяю файл «SavedRequestAwareAuthenticationSuccessHandler.java», чтобы я мог получить client_id из параметра запроса и затем зарегистрировать правильный идентификатор сеанса, полученный из объекта аутентификации, для этого идентификатора клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...