Spring Security Oauth2, поведение приложения с отключенным сеансом - PullRequest
0 голосов
/ 25 апреля 2018

Я отключил управление сеансами в моей службе REST, потому что я использую Oauth2 для аутентификации клиентов + пользователей.Итак, у меня есть следующие конфигурации:

Сервер ресурсов

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
  @Override 
  public void configure( HttpSecurity http ) throws Exception {
    http.sessionManagement().sessionCreationPolicy( SessionCreationPolicy.STATELESS );
    //....
  }
}

И базовая аутентификация:

@Configuration
@EnableWebSecurity
public class SecurityWebConfig extends WebSecurityConfigurerAdapter {
   @Override 
  public void configure( HttpSecurity http ) throws Exception {
    http.sessionManagement().sessionCreationPolicy( SessionCreationPolicy.STATELESS );
    //....
  }
}

Я не знаю, уместно ли это делать вобе конфигурации.

Теперь, когда я отправляю запрос на защищенный путь с аутентифицированным клиентом (включая токен доступа).Заголовки ответа содержат JSESSIONID что-то вроде

set-cookie:JSESSIONID=A3E6E26C28916C5D95795E934F15C8F1 Это нормальное поведение?

Чтобы продолжить мои тесты, я сделал это (чтобы получить текущего подключенного пользователя):

@RestController
@RequestMapping( "/protected" )
@Slf4j
@AllArgsConstructor
public class ChicoweursToUIController {

    private UIService service;

    @GetMapping
    public UserDTO findUser( OAuth2Authentication authentication, HttpSession session ) {
       log.info( "Connected user: {}", authentication.getUserAuthentication().getName() );
       log.info( "Is session null: {}", session==null );
       return service.findUser(authentication.getUserAuthentication().getName()  );
    }
}

Результаты журнала:

Connected user: username@mail.com
Is session null: false

Так почемуHttpSession не равно нулю?

На мой взгляд, я подумал, что Spring Security Context использует сеанс для получения аутентифицированного пользователя, т.е. если сеанс отключен, контекст безопасности не может найти текущего пользователя.Я ошибся?Может ли кто-нибудь разъяснить мне эти моменты, пожалуйста?

И, наконец, могу ли я ВСЕГДА положиться на OAuth2Authentication, чтобы найти текущего подключенного клиента и пользователя, даже если сеанс отключен?

Большое спасибо

...