Проверка подлинности вручную в Spring Security с Oauth2 не сохраняется SecurityContext в течение сеанса - PullRequest
0 голосов
/ 11 июля 2019

Я использую Spring Security Oauth2 с JWT для входа / авторизации клиентского приложения в приложении сервера авторизации, оба построены с использованием Spring Boot 2.

В клиентском приложении я делаю вход в систему вручную, получаю токен JWT с сервера авторизации и затем выполняю код

OAuth2Authentication authentication = tokenStore.readAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(authentication);

Проблема, с которой я столкнулся, заключается в том, что я хочу получить токен позже в потоке приложения, но SecurityContextHolder.getContext (). GetAuthentication () возвращает ноль. Это говорит мне, что SecurityContext очищается в какой-то момент к весне.

Как я могу сделать так, чтобы SecurityContext был постоянным на протяжении всего сеанса? Или что я делаю не так?

Некоторые фрагменты конфигурации, которые у меня есть:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
...
  @Override
  public void configure(HttpSecurity http) throws Exception {
      http.csrf()
      .disable()
      .sessionManagement()
      .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
      .and()
      .authorizeRequests()
      .antMatchers("/login")
      .permitAll()
      .anyRequest()
      .authenticated();
  }
...
}

Затем я хочу получить токен позже в потоке клиентского приложения:

 SecurityContext securityContext = SecurityContextHolder.getContext();
 OAuth2Authentication oauth = (OAuth2Authentication)securityContext.getAuthentication();
 String token = (String) oauth.getCredentials();

но объект oauth нулевой.

1 Ответ

0 голосов
/ 11 июля 2019

Вы создаете сеанс впоследствии и обновляете его контекст?

HttpSession session = request.getSession(true);
session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext);
...