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

使用客户端授权码进行Google OAuth2.0令牌交换时出现400 Bad Request错误的求助

使用客户端授权码进行Google OAuth2.0令牌交换时出现400 Bad Request错误的求助

大家好!我最近在用Next.js做客户端、Node.js + Express做服务端来实现Google OAuth2.0授权流程,结果卡在了令牌交换环节,一直返回400 Bad Request错误,想请大家帮忙排查下问题!

我的流程目前是这样的:

  • 第一步:从客户端成功打开了Google授权弹窗,用户能正常进入授权页面操作
  • 第二步:用户完成授权后,会重定向到我配置的客户端回调URI,这个回调页面的代码如下:
function OAuthCallback() {
  useEffect(() => {
    window.name = "OAuthPopup";
    const params = new URLSearchParams(window.location.search);
    if (window.opener) {
      window.opener.postMessage({
        search: window.location.search,
        code: params.get("code"),
        error: params.get("error")
      });
      window.close();
    }
  }, []);

  return (
    <div className={st.container}>
      <Text as='h1'>
        Redirect to <span className={st.flippo}>Flippo</span>!
      </Text>
    </div>
  );
}

这段代码会把拿到的授权码通过postMessage传给主窗口,然后关闭弹窗。

  • 第三步:主窗口拿到授权码后,我会把它发送给Express服务器,让服务器去和Google的令牌端点https://oauth2.googleapis.com/token做交换,但每次请求都返回400错误。

我已经自查了几个点:

  • 授权码是从回调参数里正确获取的,没有为空或乱码
  • 服务器请求的参数包含code、client_id、client_secret、redirect_uri(和Google控制台配置完全一致)、grant_type=authorization_code这些必填项
  • 客户端ID和密钥都是从Google Cloud控制台正确复制的,没有拼写错误

有没有朋友遇到过类似的问题?或者能帮我想想可能的原因吗?比如是不是回调URI的配置细节没注意到?还是请求参数的格式有问题?

备注:内容来源于stack exchange,提问作者BlackPoretsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:39:32