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

Spring Boot集成Azure AD OAuth2生产环境重定向循环求助

解决方案:Azure AD SSO在AWS负载均衡下的重定向循环问题

针对你遇到的生产环境重定向循环问题,核心原因是重定向URI的严格匹配要求和负载均衡下请求头的正确解析,以下是可落地的解决步骤:


1. 统一重定向URI(Azure AD与应用配置完全对齐)

Azure AD对重定向URI的匹配是**严格大小写、严格路径(含末尾斜杠)**的,本地环境的URI带末尾斜杠能正常工作,生产环境必须保持一致:

  • 登录Azure AD门户,找到你的应用注册,将重定向URI更新为:https://my-load-balancer:11120/login/oauth2/code/(添加末尾斜杠)
  • 在应用的application.yml/application.properties中,同步配置OAuth2客户端的重定向URI:
spring:
  security:
    oauth2:
      client:
        registration:
          azure:
            redirect-uri: "{baseUrl}/login/oauth2/code/"

2. 完善负载均衡转发头配置

AWS ELB会传递X-Forwarded-Proto(协议)、X-Forwarded-Host(主机)、X-Forwarded-Port(端口)等头,但Spring Boot需要明确配置才能正确识别外部请求的真实地址,避免应用生成错误的回调URL:

server:
  port: 11120
  use-forward-headers: true
  forward-headers-strategy: NATIVE
  tomcat:
    remote-ip-header: X-Forwarded-For
    protocol-header: X-Forwarded-Proto
    protocol-header-https-value: https

注:forward-headers-strategy: NATIVE会让Tomcat直接处理转发头,适配AWS ELB的默认头格式。


3. 明确Spring Security的回调路径匹配

在你的AadWebSecurityConfigurerAdapter子类中,显式指定OAuth2登录的回调Base URI,确保路径匹配规则统一:

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
public class AzureADSSOConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/login/oauth2/code/**").permitAll() // 放行所有回调路径分支
                .anyRequest().authenticated()
            .and()
            .oauth2Login()
                .redirectionEndpoint()
                    .baseUri("/login/oauth2/code/"); // 明确指定带末尾斜杠的回调路径
    }
}

4. 验证Docker与ELB的端口映射

  • 确保Docker容器内的应用监听端口为11120(与server.port配置一致),启动容器时正确映射端口:docker run -p 11120:11120 your-image:tag
  • 检查AWS ELB的监听规则:将HTTPS:11120转发到EC2实例的11120端口,且未修改请求路径

排查逻辑补充

如果以上配置后仍有问题,可开启Spring Security的调试日志,查看回调请求的路径与配置是否匹配:

logging:
  level:
    org.springframework.security: DEBUG

日志中重点关注OAuth2LoginAuthenticationFilter和DefaultRedirectStrategy的输出,确认回调请求是否被正确识别为授权回调。

内容的提问来源于stack exchange,提问作者Jon H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:41:26