使用客户端授权码进行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
相关产品推荐
相关产品推荐

