gpt4 book ai didi

spring-boot - 使用 Oauth2 在 Spring Security 中手动身份验证不会在整个 session 期间保留 SecurityContext

转载 作者:行者123 更新时间:2023-12-04 17:35:10 26 4
gpt4 key购买 nike

我将 Spring Security Oauth2 与 JWT 一起用于客户端应用程序到授权服务器应用程序的登录/授权,两者都是使用 Spring Boot 2 构建的。

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

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

我遇到的问题是我想稍后在应用程序流中检索 token ,但 SecurityContextHolder.getContext().getAuthentication() 返回 null。这告诉我 SecurityContext 在某个时候被 Spring 清除了。

我怎样才能使 SecurityContext 在整个 session 中保持不变?或者我做错了什么?

我的一些配置片段:

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

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

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

但 oauth 对象为空。

最佳答案

您是在之后创建一个 session 并更新它的上下文吗?

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

关于spring-boot - 使用 Oauth2 在 Spring Security 中手动身份验证不会在整个 session 期间保留 SecurityContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56989156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com