我正在使用带有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对象为空。
答案 0 :(得分:0)
您之后是否要创建会话并更新其上下文?
HttpSession session = request.getSession(true);
session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext);