请求协助配置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
相关产品推荐
相关产品推荐

