PHP调用Google API报missing required redirect URI错误如何解决?
问题解决方案
错误根因
报错是因为你使用的OAuth 2.0凭证类型和场景不匹配,未配置符合要求的重定向URI。你之前用urn:ietf:wg:oauth:2.0:oob不生效,是因为该重定向地址仅适配桌面应用类型的OAuth凭证,你之前创建的凭证类型不符合要求。
方案1:沿用原OAuth授权模式(需要首次手动授权)
如果你需要用个人/企业普通账号的权限操作Google资源,按以下步骤操作:
- 前往Google Cloud控制台重新创建OAuth 2.0凭证,创建时必须选择「桌面应用」类型,不要选网页应用、安卓/iOS应用等其他类型
- 下载新生成的凭证JSON文件,替换你现有的
secret.json - 在你现有代码的
setAuthConfig配置后,新增一行重定向URI配置兜底:
$client->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
- 如果你需要上传Google Drive文件,记得把原代码里的People API权限范围替换为Drive对应的权限,比如:
// 替换原有People API的scope配置 $client->setScopes(Google_Service_Drive::DRIVE_FILE);
调整后重新运行脚本,生成的授权链接就可以正常完成授权,复制返回的验证码粘贴到命令行即可自动生成token.json,后续无需再手动授权。
方案2:改用服务账号(适配纯服务端无人工介入场景)
如果你的脚本是服务器到服务器的自动化运行场景,不需要每次人工授权,更推荐使用服务账号方案,配置更简单:
- 前往Google Cloud控制台创建服务账号,生成JSON格式的密钥文件,保存为
service-account.json替换原有凭证 - 调整鉴权代码逻辑,无需手动授权流程,示例如下:
<?php require __DIR__ . '/vendor/autoload.php'; function getClient() { $client = new Google_Client(); $client->setApplicationName('Drive Upload Script'); // 按需调整权限范围,DRIVE_FILE仅允许操作脚本上传的文件,权限更安全 $client->setScopes(Google_Service_Drive::DRIVE_FILE); $client->setAuthConfig('service-account.json'); $client->setAccessType('offline'); return $client; } $client = getClient();
- 如果你需要将文件上传到自己个人账号的Google Drive中,需要打开对应Drive文件夹的共享设置,给服务账号的邮箱地址(可在服务账号详情页查看)授予编辑权限,否则服务账号默认只能操作自己独立的网盘空间。
内容的提问来源于stack exchange,提问作者user11092881
相关产品推荐
相关产品推荐

