Я пытаюсь выйти из системы, используя Spring OAuth2. У меня есть сервер с аннотацией @EnableOAuth2Sso
и другой сервер с аннотацией @EnableAuthorizationServer
.
Сервер Sso использует поток authorization_code
для входа пользователя и имеет конечную точку выхода из системы, которая, в свою очередь, связывается с сервером авторизации, чтобы избавиться от доступа пользователей и обновить маркер.
При вызове эти токены удаляются, так как они больше не отображаются в mongodb, но как только я обновляю свою страницу (подключенную к серверу Sso), я снова автоматически регистрируюсь, так как сервер авторизации создает новый доступ и обновить токен.
Я подозреваю, что мой сервер Sso все еще имеет действительный код авторизации, что позволяет ему запрашивать новые токены с сервера авторизации, но я не могу найти, где сервер авторизации управляет этими кодами авторизации. Кто-нибудь знает, где они хранятся и как я могу сделать недействительными эти коды авторизации? Или я совсем не на том пути?
обновление : я выяснил, что проблема действительно связана с сессиями, как предложил dur. Когда я удаляю cookie-файл сеанса сервера Sso в браузере, я должен повторно пройти аутентификацию на сервере авторизации. Я не могу заставить сервер Sso уничтожить мой cookie, хотя. Я попытался вручную перебрать файлы cookie и завершить их действие следующим образом (помните, что я использую Kotlin):
@RequestMapping("/logout",
method = [RequestMethod.GET]
)
@ResponseBody
fun redirectToLogout(request: HttpServletRequest) : RedirectView{
...
val uri = authServerInstance.uri.normalize()
val redirectView = RedirectView()
redirectView.url = "$uri/auth/logout"
request.cookies.forEach {
it.maxAge = 0
}
...
return redirectView
}
Я также попытался сделать сеанс недействительным следующим образом:
@RequestMapping("/logout",
method = [RequestMethod.GET]
)
@ResponseBody
fun redirectToLogout(request: HttpServletRequest) : RedirectView{
...
val uri = authServerInstance.uri.normalize()
val redirectView = RedirectView()
redirectView.url = "$uri/auth/logout"
request.session.invalidate()
...
return redirectView
}
В обоих случаях Sso пытается аннулировать сеанс, а затем отправляет запрос на сервер авторизации для аннулирования доступа пользователей и обновления токенов, но каким-то образом куки сеанса не становятся недействительными.