
本文档旨在解决在使用 Google 服务账号通过 Activity API 检索 Google Drive 活动时遇到的问题。我们将深入探讨服务账号的工作原理,解释为何直接使用服务账号可能无法获取预期结果,并提供一种通过域范围授权来解决此问题的方案。
Google Drive Activity API 旨在检索用户 Google Drive 中对象的更改信息。它关注的是特定用户的活动,而不是整个 Drive 或特定文件夹的活动。
服务账号是一种特殊的 Google 账号,用于在服务器对服务器的交互中代表应用程序而不是用户进行身份验证。它通常用于自动化任务,例如访问 Google Cloud Storage 或 Google Drive。
当尝试使用服务账号来获取共享文件夹的活动时,即使服务账号拥有该文件夹的编辑权限,也可能无法获取任何结果。这是因为 Activity API 默认查找的是服务账号本身的活动,而不是共享文件夹中由其他用户执行的活动。
虽然服务账号可以访问共享文件夹,但它并没有被授权代表其他用户执行操作。简单地将文件夹与服务账号共享并不等同于设置授权,使其能够代表您执行操作。
要使服务账号能够代表您(或您的域中的任何用户)访问 Google Drive Activity API,您需要启用域范围授权 (Domain-Wide Delegation)。这需要 Google Workspace 账号。
以下是启用域范围授权的步骤:
在 Google Cloud Platform 控制台中创建服务账号:
在 Google Workspace 管理控制台中启用域范围授权:
在您的代码中模拟用户:
以下是一个 PHP 示例,展示了如何使用域范围授权来模拟用户:
use Google\Client;
use Google\Service\DriveActivity;
$client = new Client();
$client->setApplicationName('Your Application Name');
$client->setAuthConfig(__DIR__ . '/service_account.json'); // 服务账号密钥文件
$client->setScopes(DriveActivity::DRIVE_ACTIVITY_READONLY);
// 模拟用户
$client->setSubject('user@example.com'); // 替换为要模拟的用户的电子邮件地址
$service = new DriveActivity($client);
$request = new DriveActivity\QueryDriveActivityRequest();
$request->setPageSize(10);
try {
$results = $service->activity->query($request);
if (count($results->getActivities()) == 0) {
echo "No activity.\n";
} else {
foreach ($results->getActivities() as $activity) {
// 处理活动
echo "Activity: " . $activity->getTitle() . "\n";
}
}
} catch (Exception $e) {
echo "An error occurred: " . $e->getMessage() . "\n";
}
注意事项:
通过启用域范围授权并模拟用户,您可以允许服务账号代表用户访问 Google Drive Activity API,并检索特定用户 Google Drive 中的活动信息。这种方法解决了直接使用服务账号时遇到的限制,并提供了更灵活和强大的方式来访问 Drive 活动数据。
以上就是使用 Google 服务账号检索 Google Drive 活动:问题与解决方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号