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

FARM栈应用生产环境Google OAuth2.0 HTTP重定向错误排查

解决方案:FARM栈生产环境Google OAuth2.0 redirect_url_mismatch问题

问题根源

生产环境中FastAPI通常运行在反向代理(如Nginx、AWS ALB)之后,request.url_for()会基于内部HTTP协议生成重定向地址,而非外部用户实际访问的HTTPS地址。这导致Google OAuth验证时收到HTTP格式的redirect_uri,违反了生产模式仅允许HTTPS重定向的规则,从而触发redirect_url_mismatch错误。

修复步骤

1. 手动指定HTTPS重定向地址(快速临时修复)

修改FastAPI的google_cb端点,直接从配置读取预定义的HTTPS API地址,手动拼接正确的redirect_uri,避免依赖url_for生成错误协议的地址:

@router.get('/google_cb')
async def login(request: Request):
    # 从配置中读取已设置的HTTPS API地址(如https://my.api.url)
    redirect_uri = f"{config['API_URL']}/oauth/google"
    return await oauth.google.authorize_redirect(request, redirect_uri)

2. 配置FastAPI信任反向代理转发头(推荐长期方案)

让FastAPI识别反向代理传递的外部协议信息,确保url_for()生成正确的HTTPS地址:

步骤a:启动Uvicorn时指定信任的代理IP

生产环境需明确指定允许的代理IP(避免使用*,降低安全风险):

uvicorn main:app --host 0.0.0.0 --port 8000 --forwarded-allow-ips='192.168.1.100'  # 替换为你的代理实际IP

步骤b:初始化FastAPI时启用HTTP覆盖信任

from fastapi import FastAPI

# 启用信任HTTP覆盖,让FastAPI使用反向代理传递的X-Forwarded-Proto头协议
app = FastAPI(trust_http_overrides=True)

步骤c:配置反向代理传递正确的转发头

以Nginx为例,确保配置中添加以下关键头信息:

location / {
    proxy_pass http://your-fastapi-internal-address:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;  # 传递外部访问的实际协议(HTTPS)
    proxy_set_header X-Forwarded-Host $host;
}

3. 验证Google Cloud Console的重定向URI配置

确保已添加的重定向URI与实际生成的地址完全一致:

  • 正确格式示例:https://my.api.url/oauth/google
  • Google的URI匹配为精确匹配,需检查协议、域名、路径是否无拼写、大小写错误。

额外验证

  • 确认生产环境的环境变量API_URL已设置为HTTPS地址,而非HTTP。
  • 可在google_cb端点临时打印生成的redirect_uri,确认格式正确:
    print(f"Generated redirect URI: {redirect_uri}")
    

内容的提问来源于stack exchange,提问作者Kerem Nalbant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:22:13