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
相关产品推荐
相关产品推荐

