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

调试Youtube Data API中redirect_uri_mismatch错误的下一步方案

问题

我正在尝试通过Youtube Data API获取自有网站视频的字幕,需要实现OAuth2授权机制。目前已经完成授权码兑换访问令牌的前置步骤,但向Google请求令牌时始终出现redirect_uri_mismatch错误。

我已经多次将Google Cloud控制台中的重定向URI复制粘贴到代码中并反复核对,确保完全匹配,但错误依旧。我怀疑是URI输入或标点格式问题,于是用Postman发起请求(该工具会自动处理格式问题),同样复制控制台中的URI,还是无法解决。之后我猜测是浏览器缓存或URI更新延迟,清除浏览器缓存、换Safari测试结果一样,而且修改控制台中的redirect_uri已经超过一天。

请问可能的问题是什么?下一步该如何调试?

Google Cloud控制台中注册的重定向URI:
https://dotxav.ownsocial.io/wp-json/youtube/youtube-oauth2-token

我的PHP代码片段:

$ch = curl_init();
$client_secret = $GLOBALS['client_secret'];
$client_id = $GLOBALS['client_id'];
$redirect_uri = "https://dotxav.ownsocial.io/wp-json/youtube/youtube-oauth2-token";
$url = "https://www.googleapis.com/oauth2/v4/token";
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
'grant_type' => 'authorization_code',
'code' => $code,
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri
)));

$result = curl_exec($ch);
curl_close($ch);
可能的问题与调试步骤

一、检查URI的大小写与隐藏字符

Google OAuth2对重定向URI的大小写严格敏感,比如HTTPS与https、路径中的大小写差异都会导致不匹配。另外,要确认URI中没有隐藏的不可见字符(比如全角空格、换行符),可以把代码中的URI复制到纯文本编辑器,和控制台的URI逐字符对比,或者用ASCII码查看工具检查每个字符的编码是否一致。

二、确认OAuth客户端类型与URI类型匹配

在Google Cloud控制台的OAuth 2.0客户端ID设置中,若你创建的是Web应用类型的客户端,必须注册Web类型的重定向URI;如果是其他类型(如桌面应用),重定向URI的规则完全不同。检查你的客户端类型是否正确,对应的URI列表是否准确添加了目标地址。

三、验证授权码对应的重定向URI

授权码是用户授权时,Google根据当时传入的redirect_uri生成的,兑换令牌时的redirect_uri必须和获取授权码时的完全一致。如果获取授权码时的URI和现在兑换令牌的URI有任何差异(比如当时用了不带HTTPS的地址、路径写错),都会触发错误。

调试方法:

  • 检查获取授权码的代码中,传入Google授权端点的redirect_uri参数是否和现在兑换令牌的URI完全相同;
  • 在获取授权码时,把当时使用的redirect_uri输出到服务器日志,和当前的地址对比。

四、核对Google Cloud项目与凭据一致性

确保代码中使用的client_id和client_secret,来自于你已经添加了正确重定向URI的那个Google Cloud项目。有时会不小心在多个项目中创建客户端ID,导致代码误用了未配置正确URI的项目凭据。

五、调试请求的实际发送内容

在curl请求中添加日志,输出实际发送的POST参数,确认redirect_uri是否和预期一致:

// 在curl_exec前添加
$postData = http_build_query(array(
'grant_type' => 'authorization_code',
'code' => $code,
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri
));
error_log('POST Data: ' . $postData); // 查看服务器日志

同时捕获curl的响应详情,查看Google返回的错误是否有更具体的提示:

$result = curl_exec($ch);
$responseInfo = curl_getinfo($ch);
error_log('Response Info: ' . print_r($responseInfo, true));
error_log('Response: ' . $result);
curl_close($ch);

六、检查网站的URL重写或代理配置

如果你的网站有URL重写规则(比如WordPress的固定链接设置)、或者使用了CDN/代理服务器,可能导致实际接收请求的URI和你注册的不一致。可以在回调端点(/wp-json/youtube/youtube-oauth2-token)中输出当前请求的实际地址:

error_log('Actual Request URI: ' . $_SERVER['REQUEST_URI']);
error_log('Actual Request URL: ' . $_SERVER['HTTP_X_FORWARDED_PROTO'] . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);

如果发现实际URI和注册的不同(比如多了尾部斜杠、被代理改成了HTTP),需要调整注册的URI或者修复服务器配置。

内容的提问来源于stack exchange,提问作者Jackson Wu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:01:33