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

Google Drive API获取文件元数据遇403错误:身份验证范围权限不足

解决Google Drive API PHP客户端403权限不足问题

错误原因分析

错误提示明确指出认证范围不足,结合代码使用服务账号并模拟用户的场景,问题通常出在配置授权、凭证缓存或文件权限环节。

具体解决步骤

1. 检查Google Cloud控制台基础配置

  • 确认Drive API已启用:进入Google Cloud控制台 → API和服务 → 搜索「Drive API」,确保状态为「已启用」。
  • 启用域范围委派(仅Google Workspace环境):
    1. 进入服务账号详情页,勾选「启用G Suite域范围委派」;
    2. 登录Google Workspace管理员控制台 → 安全 → API控制 → 域范围委派,添加服务账号的客户端ID,并授权范围https://www.googleapis.com/auth/drive。

2. 验证权限范围与凭证缓存

  • 清除客户端凭证缓存:Google PHP客户端默认会将凭证缓存到~/.config/google-api-php-client/目录,删除该目录下的所有文件,强制客户端重新获取带有正确权限范围的凭证。
  • 确认权限范围有效性:代码中使用的https://www.googleapis.com/auth/drive是全权限范围,需确保该范围已在Google Cloud控制台的「OAuth同意屏幕」中添加,且(若为域账号)已被管理员批准。

3. 检查文件访问权限

  • 测试服务账号直接访问:暂时注释掉$client->setSubject('xxxxxx');,将目标文件共享给代码中client_email对应的服务账号邮箱,运行代码验证是否能正常获取文件元数据。
  • 确认模拟用户权限:若必须使用setSubject模拟用户,需确保该用户账号是域内有效账号,且拥有目标文件的访问权限(如编辑、查看权限)。

测试代码示例(服务账号直接访问)

<?php

use Google\Client;
use Google\Service\Drive;

$client = new Client();
$client->setAuthConfig([
      'type' => 'service_account',
      'client_id' =>'xxxxxx',
      'client_email' => 'xxxxxx',
      'private_key_id' => 'xxxxxx',
      'private_key' => 'xxxxxx',
]);
// 使用预定义常量替代手动写URL,避免拼写错误
$client->setScopes([Drive::DRIVE]);

$drive = new Drive($client);

$fileId = 'xxxxxx';

$optParams = [
      'fields' => '*',
];

try {
    $results = $drive->files->get($fileId, $optParams);
    print_r($results);
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:54:20