Node.js Express部署EC2时Google OAuth 400 invalid_request错误
Google OAuth 400 invalid_request 重定向URI不匹配报错修复方案
核心触发原因
- 访问入口不统一:实际访问服务使用
https://<EC2公网IP>:8000,但Google控制台配置的已授权源、重定向URI均为https://<EC2公网IP>.xip.io:8000,域名不一致直接触发Google安全校验拦截 - 回调地址配置不严谨:Passport Google策略中
callbackURL使用相对路径/auth/google/callback,公网部署时Passport会根据当前请求的Host自动拼接完整回调地址,若请求来自裸IP访问,拼接出的回调地址为https://<EC2公网IP>:8000/auth/google/callback,与控制台配置的xip.io后缀地址完全不匹配 - 配置规范不符:公网场景下Google OAuth对带非标准端口的HTTPS重定向URI校验规则更严格,混用地址时极易触发拦截
修复步骤
1. 统一全链路访问域名
全程使用https://<EC2公网IP>.xip.io:8000作为服务访问入口,禁止直接输入裸IP+端口访问服务,所有触发Google登录的页面、跳转链接都基于该xip.io域名生成。
2. 修正Passport策略配置
将相对路径的回调地址改为与Google控制台完全一致的绝对地址,修改AUTH_OPTIONS配置段:
const AUTH_OPTIONS = { // 地址需与Google控制台填写的重定向URI完全一致,不得有字符差异 callbackURL: 'https://<替换为你的EC2公网IP>.xip.io:8000/auth/google/callback', clientID: config.CLIENT_ID, clientSecret: config.CLIENT_SECRET, };
校验规则说明:重定向URI的协议、域名、端口、路径必须完全匹配,末尾多余斜杠、http/https写错、端口遗漏都会直接触发400错误。
3. 核对Google云控制台配置
进入对应OAuth 2.0客户端ID的配置页,确认以下配置值准确:
- 已授权的JavaScript来源:仅保留
https://<EC2公网IP>.xip.io:8000,不要追加任何路径后缀 - 已授权的重定向URI:仅保留
https://<EC2公网IP>.xip.io:8000/auth/google/callback,不要在末尾加斜杠 - 配置修改后等待3-5分钟再测试,Google侧配置生效存在缓存延迟,修改后立即测试大概率仍会报错
4. 排除本地缓存干扰
测试前清空浏览器对应域名的Cookie、本地存储,或直接使用无痕模式访问登录入口,避免本地缓存的旧请求参数干扰校验。
兜底排查方法
若完成上述步骤仍报错,打开浏览器开发者工具,抓取跳转到Google授权页的请求,查看请求参数中redirect_uri的实际值,将该值一字不差复制到Google控制台的已授权重定向URI列表中即可,该参数是Google做匹配校验的唯一依据。
Google OAuth 400报错页面截图
内容的提问来源于stack exchange,提问作者askMe
相关产品推荐
相关产品推荐

