我在使用Google API PHP客户端(https://github.com/googleapis/google-api-php-client)时进行域范围的委托时遇到问题。
我知道这个问题以前曾被问过,但是我找不到任何解决方案,所以我在这里再次询问,希望有人能解决这个问题。
情况
我按照Google指南(https://developers.google.com/admin-sdk/directory/v1/guides/delegation)创建了一个服务帐户并启用了G Suite域范围的委派,但是如果未明确共享它们,我将无法从我的服务帐户中读取日历。
我使用“普通”用户日历进行了测试:
这里是代码:
<?php
require __DIR__ . '/vendor/autoload.php';
$client = new Google_Client();
putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json');
$client->useApplicationDefaultCredentials();
$client->setApplicationName('TestCalendarAPI');
$client->authorize();
$scopes = implode(' ', array(Google_Service_Calendar::CALENDAR, Google_Service_Calendar::CALENDAR_EVENTS));
$client->setScopes($scopes);
$service = new Google_Service_Calendar($client);
$optParams = array(
'maxResults' => 10,
'orderBy' => 'startTime',
'singleEvents' => TRUE,
'timeMin' => date('c')
);
$results = $service->events->listEvents('[email protected]', $optParams);
$events = $results->getItems();
if (empty($events)) {
print "No upcoming events found.\n";
}
else {
foreach ($events as $event) {
printf("Summary: %s \n", $event->summary);
}
}
问题
问题是,我不想与服务帐户共享每个日历以读取其事件。这不是域范围委派的目的吗?
此外,我要做的是读取资源的事件,并且我无法与服务帐户共享资源的日历。如果无法使整个域范围的委派工作,您是否知道如何与服务帐户共享资源日历?
提前感谢您的帮助!
解决方案>>
这是我采用的解决方案(希望这可以对某人有所帮助!)。
我冒充了订阅我感兴趣的房间的用户:
$client->setSubject('[email protected]');
然后阅读房间的日历:
$results = $service->events->listEvents('[email protected]', $optParams);
这样,甚至不需要与服务帐户共享用户或会议室的日历!
我对使用Google API PHP客户端(https://github.com/googleapis/google-api-php-client)的域范围委派有问题。我知道之前曾有人问过这个问题,但我找不到任何...
使用服务帐户,您需要模拟域用户才能访问与该用户相同的数据,否则,您将只能对可访问的公共数据进行请求。如果您需要每个用户的日历,则可以模拟每个用户。