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

请求协助配置Spring Boot+Okta的SP发起式SLO(基于WebSecurityConfigurerAdapter)

配置SP发起式SAML单点注销(SLO)

嘿,既然SSO已经跑起来了,那咱们把SP发起的SLO配置好就行。下面是具体的步骤和代码调整:

1. 扩展Spring Security配置,添加注销逻辑

你需要在现有的configure(HttpSecurity http)方法里,添加注销相关的配置,同时在SAML服务提供商配置中指定注销回调路径和SLO处理器。

修改后的完整配置代码如下:

@Override
protected void configure(final HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .antMatchers("/saml*", "/logout").permitAll() // 开放注销端点权限
            .anyRequest().authenticated()
        .and()
        .logout() // 配置注销流程
            .logoutSuccessHandler(samlLogoutSuccessHandler())
            .logoutUrl("/logout") // SP发起注销的端点
            .deleteCookies("JSESSIONID") // 清理会话Cookie
        .and()
        .apply(saml())
            .serviceProvider()
                .keyStore()
                    .storeFilePath(this.keyStoreFilePath)
                    .password(this.password)
                    .keyname(this.keyAlias)
                    .keyPassword(this.password)
                .and()
                .protocol("https")
                .hostname(String.format("%s:%s", "localhost", this.port))
                .basePath("/")
                .logoutPath("/saml/logout") // SAML注销响应的回调路径
                .logoutSuccessUrl("/") // 注销完成后跳转的页面
            .and()
            .identityProvider()
                .metadataFilePath(this.metadataUrl);
}

// 自定义SAML注销成功处理器
private SamlLogoutSuccessHandler samlLogoutSuccessHandler() {
    SamlLogoutSuccessHandler successHandler = new SamlLogoutSuccessHandler();
    successHandler.setDefaultTargetUrl("/"); // 默认跳转首页
    return successHandler;
}

2. 关键配置说明

  • 开放注销端点权限:把/logout加入permitAll(),确保用户发起注销请求时不会被拦截
  • 配置SP注销端点:logoutUrl("/logout")是用户触发注销的入口,比如前端按钮可以指向这个路径
  • SAML注销回调路径:logoutPath("/saml/logout")是Okta发送SLO响应的地址,需要和Okta应用配置里的“Single Logout URL”保持一致
  • 清理会话:deleteCookies("JSESSIONID")确保本地会话被彻底清除

3. Okta端的必要配置

别忘了在Okta的SAML应用设置里做以下操作:

  • 启用“Single Logout”选项
  • 在“Single Logout URL”里填入你的SP回调地址,比如https://localhost:8443/saml/logout(要和代码里的logoutPath对应,注意协议和端口)
  • 确认“SP Issuer”和你代码里的SP实体ID一致(如果没显式设置,默认是https://localhost:port/)
  • 上传你的SP证书(和keyStore里的证书一致),确保Okta能验证SLO请求的签名

这样配置完成后,用户访问/logout时,你的应用会向Okta发送SLO请求,Okta注销用户的全局会话后,再回调到你的SP的/saml/logout路径,最后跳转到指定的成功页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:22:57