Spring Boot 3.3集成OpenID认证时遭遇重定向循环问题求助
OpenID认证重定向循环问题排查与解决
核心问题分析
- 客户端与提供者未绑定:你的
application.yml中OAuth2客户端注册ID是esante,但提供者ID是example,Spring Security无法将二者关联,导致认证流程逻辑混乱,重复触发授权码交换。 - 错误配置登录页:手动指定
loginPage为外部网站会干扰Spring Security OAuth2的自动跳转机制,框架本应自动重定向到提供者的授权页面,无需手动设置。 - 成功跳转目标错误:将
defaultSuccessUrl设为回调端点/redirect-uri,导致认证完成后又跳回回调流程,触发循环。
修正步骤
1. 修正application.yml配置
将提供者ID改为与客户端注册ID一致,并明确关联:
security: oauth2: client: registration: esante: client-id: MyId client-secret: MyClientSecret scope: openid redirect-uri: "https://localhost:41448/redirect-uri" authorization-grant-type: authorization_code client-name: example provider: esante # 明确绑定对应的提供者 provider: esante: # 修改提供者ID为esante,与客户端注册ID匹配 authorization-uri: https://myExternalWebsite.integration.fr/realms/sas/protocol/openid-connect/auth token-uri: https://myExternalWebsite.integration.fr/realms/sas/protocol/openid-connect/token user-info-uri: https://myExternalWebsite.integration.fr/realms/sas/protocol/openid-connect/userinfo issuer-uri: https://myExternalWebsite.integration.fr/realms/sas
2. 调整SecurityConfig配置
移除错误的loginPage设置,将成功跳转目标改为实际业务页面:
@EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(authorizeRequests -> authorizeRequests .anyRequest().authenticated() ) .oauth2Login(oauth2Login -> oauth2Login .defaultSuccessUrl("/schedule/{id}", true) // 登录成功后跳转到目标业务页 ) .requiresChannel(channel -> channel.anyRequest().requiresSecure() ); return http.build(); } }
额外注意事项
- 无需手动为
/redirect-uri配置permitAll(),Spring Security OAuth2客户端过滤器会自动处理该端点的请求,跳过授权检查。 - 确认外部OpenID提供者后台配置的回调地址与你
redirect-uri完全一致(包括协议、端口、路径),地址不匹配会导致认证失败或循环。 - 检查是否有自定义过滤器/拦截器干扰了认证状态的保存,比如未正确传递会话信息。
内容的提问来源于stack exchange,提问作者Bam
相关产品推荐
相关产品推荐

