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

JHipster社交登录redirect_url错误:Google登录本地正常生产环境异常

解决Google登录Redirect URI错误的方案

这问题我之前帮人排查过,核心原因是你的Nginx反向代理没把真实的请求头传递给后端应用,导致后端生成redirect_uri的时候用了容器内部的地址,而不是用户实际访问的域名。下面是具体的解决步骤:

1. 修正Nginx代理配置,传递真实请求头

你的Nginx location /portal 块里需要添加几个关键的请求头,让后端应用知道用户实际访问的域名和协议:

location /portal {
    proxy_pass http://domain:8888;
    # 传递真实的主机名(域名)
    proxy_set_header Host $host;
    # 传递真实的协议(http/https)
    proxy_set_header X-Forwarded-Proto $scheme;
    # 传递真实的客户端IP
    proxy_set_header X-Forwarded-For $remote_addr;
    # 传递完整的访问主机地址
    proxy_set_header X-Forwarded-Host $host;
}

2. 配置后端应用信任反向代理

接下来要让你的后端应用(不管是Spring Boot、Node.js还是其他框架)识别这些X-Forwarded-*开头的头是来自可信的Nginx代理,这样才会用这些头里的信息生成正确的redirect_uri。

举几个常见框架的配置例子:

  • Spring Boot:在application.properties里添加:
    server.forward-headers-strategy=NATIVE
    server.use-forward-headers=true
    
  • Node.js/Express:使用trust proxy设置:
    app.set('trust proxy', true);
    

3. 验证Google开发者控制台的Redirect URI配置

最后别忘了去Google开发者控制台,把生产环境的正确Redirect URI(https://domain.com/portal/signin/google)添加到OAuth 2.0客户端的授权重定向URI列表里,确保和后端生成的地址完全一致。

问题根源补充

当请求经过Nginx代理时,后端应用默认会认为请求是来自Nginx的(也就是http://domain:8888),而不是用户实际访问的https://domain.com。所以生成Google登录的redirect_uri时,就用了容器内部的地址,导致Google验证不通过。通过传递正确的请求头并让后端信任代理,就能让后端用真实的域名生成redirect_uri了。

内容的提问来源于stack exchange,提问作者Viktor Reinok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:50:45