1

我的团队有一个 Spring Boot Web 应用程序。我们最近在我们公司向客户提供的服务中添加了 SAML 支持。我们基于 spring-security-saml 1.0.6 扩展开发了一个解决方案。

我们的一位客户进行了审查,发现浏览器 sessionId 在成功登录后没有改变。这是主要弹簧安全代码默认打开的功能,并通过 sessionManagement.sessionFixation 选项进行配置。

我已经尝试在我们的 SAML 配置中添加对它的引用,尝试了所有可能的配置选项,但它似乎根本没有任何效果。这是配置 HttpSecurity 对象的 WebSecurityConfigurationAdapter 代码的部分配置:

        http
                .apply(saml())
                .authenticationProvider(samlAuthenticationProvider())
                .userDetailsService(samlUserDetailsService)
                .successHandler(authenticationSuccessHandler())
                .failureHandler(new SimpleUrlAuthenticationFailureHandler("/"))
                .serviceProvider()
                .keyStore()
                .storeFilePath(samlProperties.getKeystore())
                .password(samlProperties.getKeystorePassword())
                .keyname(samlProperties.getDefaultKey())
                .keyPassword(samlProperties.getDefaultKeyPassword())
                .and()
                .sessionManagement().sessionFixation().changeSessionId()     

我看过一篇文章提到需要手动配置 SAML 提供程序以使用为核心 spring 安全性定义的某些对象,但它没有专门处理 sessionFixation 配置。

在用户名/密码登录期间,我可以在日志文件中看到会话 ID 切换,其中 spring 安全模块设置为跟踪:

2020-10-07 15:47:19.282 DEBUG 41443 S:A5787647 R:d429a48d --- [nio-8081-exec-1] s.s.w.c.SecurityContextPersistenceFilter : SecurityContextHolder now cleared, as request processing completed
2020-10-07 15:47:19.294 DEBUG 41443 S:C5DA158B R:67143c30 --- [nio-8081-exec-9] o.s.security.web.FilterChainProxy        : /initial-page at position 1 of 14 in additional filter chain; firing Filter: 'MetadataGeneratorFilter'

我不确定过滤器链是否被过早终止,或者 sessionFixation 过滤器是否从未在 SAML 端配置过。有谁知道我怎样才能让它工作?

4

0 回答 0