You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 Identity Server与Spring SAML无状态集成方案咨询

无状态Spring SAML + WSO2 Identity Server 5.11.0集成实现方案

核心思路是关闭Spring Security默认的服务端会话存储逻辑,将认证信息通过自包含的客户端凭证存储,全程不依赖服务端会话:


1. 关闭Spring Security默认会话管理

首先修改Spring Security配置,将会话创建策略设置为STATELESS,彻底禁用JSESSIONID的生成和消费:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            // 其余原有SAML、权限相关配置保留
    }
}

注意:该配置生效后所有依赖服务端会话的逻辑都会失效,需要配套客户端凭证逻辑完成认证校验

2. 改造SAML认证成功处理逻辑

默认的SAML认证成功处理器会将认证信息绑定到服务端会话,现在需要替换为自定义逻辑:

  • 完成SAML断言校验后(必须校验断言签名、有效期、签发方为你的WSO2 IS 5.11.0实例),提取断言中的用户属性、权限、有效期等信息
  • 将上述信息加密签名生成自包含的JWT/客户端token,返回给客户端存储(可以存在HttpOnly Cookie或者请求头携带的存储介质中)

WSO2 IS 5.11.0默认返回的SAML断言已经包含配置好的用户属性,不需要额外调用接口查询用户信息

3. 新增客户端token校验过滤器

在Spring Security过滤器链的SAML过滤器之前,新增自定义token校验过滤器:

  • 每次请求时从请求头/Cookie中提取客户端携带的token
  • 校验token的签名、有效期,校验通过后直接把对应的认证信息组装后存入SecurityContextHolder,全程不需要查询服务端会话

4. 关闭SAML模块依赖会话的逻辑

因为没有服务端会话,需要调整SAML的配套逻辑:

  • 禁用SAML的RelayState服务端会话存储,可将RelayState签名后交给前端存储,回调时带回即可
  • 替换SAML断言重放检测逻辑:如果需要做重放防护,可以用分布式缓存存储断言ID和有效期,不要绑定到用户会话

注意事项

  • 如果使用Spring Security 5.4+版本的官方SAML2模块,已经提供无状态场景的扩展点,不需要完全重写核心过滤器
  • 客户端token必须使用强签名算法,有效期不要设置过长,降低凭证泄露风险
  • WSO2 IS侧不需要额外调整配置,仅需保证SAML断言的签发方、受众、签名证书和SP侧配置一致即可

内容的提问来源于stack exchange,提问作者ashok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:36:05