Spring Security Oauth2,禁用会话的应用行为

时间:2018-04-24 21:19:20

标签: session spring-security session-cookies spring-security-oauth2 spring-session

我在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来查找当前连接的客户端和用户,即使会话被禁用了?

非常感谢

0 个答案:

没有答案