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

Spring Boot 3.3集成OpenID认证时遭遇重定向循环问题求助

OpenID认证重定向循环问题排查与解决

核心问题分析

  1. 客户端与提供者未绑定:你的application.yml中OAuth2客户端注册ID是esante,但提供者ID是example,Spring Security无法将二者关联,导致认证流程逻辑混乱,重复触发授权码交换。
  2. 错误配置登录页:手动指定loginPage为外部网站会干扰Spring Security OAuth2的自动跳转机制,框架本应自动重定向到提供者的授权页面,无需手动设置。
  3. 成功跳转目标错误:将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:52:10