Spring Vaadin部署AWS时Google OAuth重定向HTTPS报错排查
问题现象
登录自研应用时收到如下提示:
若您是应用开发者,请确保请求详情符合Google政策要求。redirect_uri: http://XXXXXX/login/oauth2/code/google
尝试将该地址添加到Google Cloud控制台的已授权重定向URI列表时,收到报错:
Invalid Redirect: You are using a sensitive scope. URI must use https:// as the scheme(无效重定向:您使用了敏感权限范围,URI必须采用https://作为协议方案)

手动添加带https://前缀的重定向地址后,登录时实际请求的redirect_uri依旧是http开头,仍然触发政策合规提示。
本地运行应用正常,部署到AWS后出现该问题,使用技术栈为Java、Spring、Vaadin。
根因说明
你配置的spreadsheets、drive、script.scriptapp都属于Google OAuth敏感权限范围,强制要求重定向URI必须使用HTTPS协议。
部署到AWS时,HTTPS请求通常会在负载均衡(ALB/CloudFront)层完成SSL卸载,转发到后端Spring应用的实际请求是HTTP协议,Spring Security默认不会识别负载均衡转发的协议头,自动生成OAuth2重定向地址时就会使用http前缀,和Google侧的HTTPS要求冲突。
修复步骤
1. 配置Spring识别反向代理转发头
在application.properties配置文件中添加如下配置,让Spring正确读取负载均衡传递的HTTPS协议标识:
# Spring Boot 2.2+版本使用该配置 server.forward-headers-strategy=native # Spring Boot 2.2以下版本替换为如下配置 # server.use-forward-headers=true
AWS的ALB/CloudFront默认会携带X-Forwarded-Proto头标识原始请求协议,添加该配置后Spring Security会自动生成https开头的重定向URI。
2. 兜底配置(可选)
如果添加上述配置后仍然生成http前缀的重定向地址,可以在OAuth2安全配置类中显式指定HTTPS重定向地址,修改WebSecurityConfig的configure方法:
@Override protected void configure(HttpSecurity http) throws Exception { super.configure(http); http.oauth2Login() .loginPage(LOGIN_URL).permitAll() // 将下方域名替换为你应用的实际对外访问域名 .redirectionEndpoint() .baseUri("https://替换为你的实际域名/login/oauth2/code/*"); }
3. AWS侧配置校验
- 确认负载均衡443端口HTTPS监听器配置正常,SSL证书有效
- 确认负载均衡转发到后端8080端口时,未禁用
X-Forwarded-*系列头转发(AWS默认开启,无特殊修改无需调整) - 不需要在Spring应用内部配置HTTPS证书,SSL卸载统一在负载均衡层处理即可,避免双重HTTPS冲突
4. Google Cloud控制台配置校验
确认Google Cloud控制台的已授权重定向URI列表中,准确填写https://你的实际域名/login/oauth2/code/google,地址不要带多余斜杠、路径不要写错。
验证方式
重新部署应用后触发Google登录,查看跳转到Google授权页的请求参数,确认redirect_uri字段为https开头且与控制台配置完全一致,即可正常完成授权流程。
注意:本地调试如果需要用到Drive/Sheets类敏感scope,也需要使用HTTPS隧道工具映射本地服务为HTTPS地址,否则会触发相同报错。
内容的提问来源于stack exchange,提问作者Александр Хворостенко

