Spring Security SAML2登录后预期Saml2AuthenticationToken却获AnonymousAuthenticationToken
Spring Security SAML2 登录后获取AnonymousAuthenticationToken而非Saml2AuthenticationToken的排查方案
问题场景
基于Spring Boot 2.7.14 + Spring Security SAML2 Service Provider 5.8.2搭建SURFConext对接的SAML2登录,调用https://<mymachine.xx>.nl/saml2/authenticate/surf触发登录后,IDP已返回正确用户数据,但最终获取到的是已认证状态的AnonymousAuthenticationToken,而非预期的Saml2AuthenticationToken,无法获取用户详情。
排查与解决步骤
1. 移除自定义ACS控制器,使用框架自动配置的端点
你自定义了@RequestMapping("/federation/saml/SAMLAssertionConsumer")作为ACS地址,但Spring Security SAML2 5.8会自动注册ACS处理端点,自定义控制器会绕过框架的SAML2认证流程,导致断言无法被解析:
- 删掉自定义的AssertionConsumer控制器
- 将SURFConext中的ACS地址修改为框架默认地址:
https://<mymachine.xx>.nl/saml2/login/surf(对应你的注册名surf) - 框架会自动处理这个端点的SAML断言请求,生成Saml2AuthenticationToken并写入SecurityContext
2. 修正实体ID的协议与路径错误
你配置的实体ID包含多余的冒号,且协议为HTTP(实际服务用HTTPS),这会导致SAML元数据校验失败:
- 修改yml中的实体ID为:
https://<mymachine.xx>.nl/saml2/service-provider-metadata/surf - 确保该值与SURFConext后台配置的实体ID完全一致(协议、路径、字符都不能差)
3. 检查SecurityFilterChain的端点权限配置
确保SAML2相关端点被允许匿名访问,避免被其他认证过滤器拦截:
@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth // 允许SAML元数据、认证发起、ACS回调端点匿名访问 .requestMatchers("/saml2/service-provider-metadata/**", "/saml2/authenticate/**", "/saml2/login/**").permitAll() // 其他请求需要认证 .anyRequest().authenticated() ) .saml2Login(withDefaults()); return http.build(); }
4. 排查匿名认证的异常配置
已认证状态的AnonymousAuthenticationToken通常是配置错误导致的:
- 检查是否手动配置了
anonymous().authorities("ROLE_ANONYMOUS")或类似代码,这会将匿名用户标记为已认证 - 恢复Spring Security默认的匿名认证配置,默认匿名用户是未认证状态
5. 跟踪SAML2认证流程的关键断点
针对5.8版本,在以下核心类方法上设置断点,确认流程是否正常执行:
org.springframework.security.saml2.provider.service.web.authentication.Saml2AuthenticationFilter#doFilterInternal:检查是否接收到SAML断言POST请求org.springframework.security.saml2.provider.service.authentication.OpenSamlAuthenticationProvider#authenticate:确认是否解析断言并生成Saml2AuthenticationTokenorg.springframework.security.web.context.SecurityContextHolderFilter#doFilterInternal:检查SecurityContext是否被正确设置
内容的提问来源于stack exchange,提问作者JvdLinden
相关产品推荐
相关产品推荐

