【发布时间】:2021-08-13 16:03:47
【问题描述】:
使用 Spring Security SAML 1.0.10,当 SAML 会话在 SP 上超时,但在 IdP 上仍处于活动状态时,SLO 尝试失败。
如何复制
- 将会话超时设置为一分钟 (server.servlet.session = 1m)
- 在您的 SP 上登录
- 在不同的辅助 SP 上登录 - 它必须使用 SSO
- 等待会话超时
- 在辅助 SP 上进行锁定
这会在 Spring 中导致 ClassCastException,因为 SecurityContextHolder.getContext().getAuthentication() 包含不包含凭据的 AnonymousAuthenticationToken。它还会破坏过滤器链,并且永远不会向 IdP 发送 LogoutResponse,并且会在浏览器中显示错误页面。
java.lang.ClassCastException: class java.lang.String cannot be cast to class org.springframework.security.saml.SAMLCredential (java.lang.String is in module java.base of loader 'bootstrap'; org.springframework.security.saml.SAMLCredential is in unnamed module of loader 'app')
at org.springframework.security.saml.SAMLLogoutProcessingFilter.processLogout(SAMLLogoutProcessingFilter.java:172)
这是故意的,是错误还是我配置错误? 如果它是有意的或错误的,是否存在解决方法?
【问题讨论】:
标签: spring-security spring-saml