使用Oauth2在Spring Security中进行手动身份验证不会在整个会话中保留SecurityContext

时间:2019-07-11 12:25:45

标签: spring-boot authentication spring-security-oauth2

我正在使用带有JWT的Spring Security Oauth2,以将客户端应用程序登录/授权到Authorization Server应用程序,二者均使用Spring Boot 2构建。

在客户端应用程序中,我正在手动进行登录,从授权服务器中检索JWT令牌,然后执行代码

number

我遇到的问题是我想稍后在应用程序流程中检索令牌,但是SecurityContextHolder.getContext()。getAuthentication()返回null。这告诉我SecurityContext会在春季被清除。

如何使SecurityContext在整个会话中保持不变?还是我做错了什么?

我拥有的一些配置摘要:

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

然后我想稍后在客户端应用程序流中检索令牌:

@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();
  }
...
}

但是oauth对象为空。

1 个答案:

答案 0 :(得分:0)

您之后是否要创建会话并更新其上下文?

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