Как сохранить зарегистрированного пользователя Spring Boot OAuth2 в сеансе?

#java #spring #spring-boot #oauth-2.0 #single-page-application

#java #spring #spring-boot #oauth-2.0 #одностраничное приложение

Вопрос:

Я пытаюсь реализовать автоматическую аутентификацию для моего сервера авторизации Spring Boot (созданного через @EnableAuthorizationServer), чтобы я мог запрашивать новые токены доступа из моего SPA.

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

Я не смог найти никакой информации о том, как решить мою проблему в Интернете. Я предполагаю, что аннотация @EnableAuthorizationServer каким-то образом отключает хранилище сеанса, но я не смог найти, где это происходит.

Допустим, я «вхожу» на свой сервер аутентификации следующим образом:

 curl -X POST 
  http://localhost:8080/oauth/token 
  -H 'Authorization: Basic Y2xpZW50OnNlY3JldA==' 
  -H 'content-type: multipart/form-data 
  -F grant_type=password 
  -F username=demo 
  -F password=demo
  

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

 // This controller is in my Auth Server
@RestController
public class SecurityController {

    @GetMapping("silentauth")
    public String silentAuth(Principal principal) {
        return principal.toString();
    }
}

  

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

Комментарии:

1. вы пробовали Springboot 2.2.0? у него последняя версия Spring Security, обычно вам ничего не нужно делать, поскольку на стороне клиента вы получаете SESSIONID cookie

2. Вы говорите о стандартной аутентификации с отслеживанием состояния, предоставляемой Spring Boot. К сожалению, здесь это мне не поможет.

3. хорошо, но, возможно, если вы заглянете в SessionRepository или SecurityContextHolder, это может помочь

4. Как сервер аутентификации должен определить, какой пользователь вызывает silentauth конечную точку? Эта информация должна каким-то образом сохраняться в HTTP-запросе, потому что сам HTTP логически не имеет состояния.