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

Spring Security OAuth2授权码无法获取AccessToken,出现重定向循环

问题分析与解决方案

看起来你的Spring Boot OAuth2客户端没有正确识别授权服务器返回的回调请求,导致重复触发授权流程,最终引发重定向循环。结合你的配置和日志,我梳理了几个关键问题点和修复步骤:

1. 回调端点路径不匹配

你的授权服务器重定向回来的路径是/oauth2/callback/pgm-backend,但在HttpSecurity配置中,你设置的redirectionEndpoint().baseUri("/oauth2/callback")并不包含客户端ID后缀。Spring Security的OAuth2登录回调需要精准匹配回调路径,否则会把请求当成普通未认证请求,重新触发授权流程。

修改redirectionEndpoint的配置,用通配符匹配带客户端ID后缀的路径:

.redirectionEndpoint()
    .baseUri("/oauth2/callback/*")

或者更精确地匹配你的客户端ID:

.redirectionEndpoint()
    .baseUri("/oauth2/callback/pgm-backend")

2. 升级OAuth2客户端配置格式

你当前使用的oauth2.client是旧版Spring Security的配置格式,Spring Boot 2.x及以后的版本推荐使用结构化配置,确保配置能被正确加载到OAuth2客户端组件中。

更新你的application.yml配置如下:

spring:
  security:
    oauth2:
      client:
        registration:
          pgm-backend: # 这个ID要和回调路径里的后缀完全一致
            client-id: pgm-backend
            client-secret: 2XmrKjm2AJkWrSl2WwaqMBioHHQB6YOgSlaBWR0
            authorization-grant-type: authorization_code
            redirect-uri: "{baseUrl}/oauth2/callback/pgm-backend"
            scope:
              - openid
              - offline
        provider:
          pgm-backend:
            authorization-uri: https://auth.server.com/oauth2/auth
            token-uri: https://auth.server.com/oauth2/token
            user-info-uri: https://auth.server.com/userinfo
            user-name-attribute: sub # 根据授权服务器返回的用户字段调整

3. 修复自定义授权请求解析器的潜在问题

你自定义了OAuth2AuthorizationRequestResolver来覆盖state参数,需要确保:

  • 解析器生成的redirectUri和授权服务器返回的回调路径完全一致
  • 正确处理state参数的验证逻辑,确保回调请求中的state能被Spring Security匹配,否则会被拒绝并重新触发授权

4. 修正权限配置的路径格式

你当前的antMatchers配置中,oauth2/**前面缺少了斜杠,会导致路径匹配失败,修正后应为:

.antMatchers("/login","/login/**","/oauth2/**")
    .permitAll()

验证修复流程

完成以上修改后重启应用:

  1. 访问需要认证的接口,会被正常重定向到授权服务器
  2. 授权成功后,授权服务器重定向回回调路径,Spring Security会自动识别这是OAuth2回调请求
  3. 自动调用token端点交换Access Token,之后跳转到最初请求的接口,不再触发重定向循环

内容的提问来源于stack exchange,提问作者Riyaz Mohammed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:25:05