Олицетворение EMAIL ID пользователя с использованием учетных данных Google Oauth2 «Сервисная учетная запись»

Я пытаюсь создать события календаря Google, используя учетную запись службы Google Api OAuth из PHP GAE.

Мне нужен правильный Идентификатор сессии или EMail ID пользователя в поле Календарь событий ‘создано’.
Это возможно в Google Apps Script (GAS), он создает события с правильным идентификатором сессии.

Но я хочу, чтобы то же самое было сделано в PHP GAE (Google App Engine). Итак, я попытался олицетворять идентификатор пользователя следующим образом:Выполнение делегирования полномочий Служб Google для всего домена

Моя цель — вставить правильный идентификатор любого конечного пользователя автоматически, как в GAS (Google Apps Script). Я не хочу, чтобы какие-либо учетные данные по умолчанию устанавливались в поле «созданный».

С использованием Клиентская библиотека PHP Я пытался выдать себя за пользователя в Calendar API. Я не получил полный образец Calendar API. Итак, я попробовал документацию Drive API образец, этот пример, кажется, работает нормально, используя другого пользователя домена также

Используя Calendar API, я написал приведенный ниже пример.

 <?php
require_once realpath(dirname(__FILE__).'/google-api-php-client-master/src/Google/autoload.php');
require_once realpath(dirname(__FILE__).'/google-api-php-client-master/src/Google/Service/Calendar.php');
require_once realpath(dirname(__FILE__).'/google-api-php-client-master/src/Google/Service/Oauth2.php');

use google\appengine\api\users\User;
use google\appengine\api\users\UserService;

$user = UserService::getCurrentUser();
$userEmail=$user->getEmail();

$client_email = '34234242424-qssjf8kg1kk42dnjdvd2ndrk7rou44@developer.gserviceaccount.com';
$private_key = file_get_contents('key.p12');
$scopes = array('https://www.googleapis.com/auth/calendar');

$credentials = new Google_Auth_AssertionCredentials(
$client_email,
$scopes,
$private_key
);
$credentials->sub = $userEmail;
$client = new Google_Client();
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}
$service =new Google_Service_Calendar($client);
$event = new Google_Service_Calendar_Event();
$start = new Google_Service_Calendar_EventDateTime();
$start->setDateTime('2015-09-26T10:00:00.000-07:00');
$event->setStart($start);
$end = new Google_Service_Calendar_EventDateTime();
$end->setDateTime('2015-09-26T10:00:00.000-07:00');
$event->setEnd($end);
$createdEvent = $service->events->insert('[email protected]', $event);

Это работает хорошо, когда я проверяю это письмо, я получил правильные учетные данные учетной записи службы.
Но когда я использовал другой идентификатор электронной почты, я получил это ниже ошибка

PHP Fatal error: Uncaught exception 'Google_Auth_Exception' with message 'Error refreshing the OAuth2 token, message: '{ "error" : "unauthorized_client", "error_description" : "Unauthorized client or scope in request." }'' in /base/data/home/apps/s~production/1.3874/google-api-php-client-master/src/Google/Auth/OAuth2.php:363 Stack trace: #0 /base/data/home/apps/s~production/1.387/google-api-php-client-master/src/Google/Auth/OAuth2.php(314): Google_Auth_OAuth2->refreshTokenRequest(Array) #1 /base/data/home/apps/s~ei-html-production/1.3874/final.php(34): Google_Auth_OAuth2->refreshTokenWithAssertion() #2 {main} thrown in /base/data/home/apps/s~production/1.38742/google-api-php-client-master/src/Google/Auth/OAuth2.php on line 363

Пожалуйста, помогите мне, что я сделал не так. Почему проблема возникает, когда я использую diff email ID, моим конечным пользователем, который будет создавать события cal, может быть любой идентификатор домена GMAIL или Google.

Так что, плз, помогите хотя бы с примерной частью …

Ссылочные ссылки:

Как вставить событие Календаря Google с помощью Google Api 3 для любого пользователя в домене?

Как создать событие Календаря Google без напоминания / Как получить учетные записи служб для олицетворения пользователей

0

Решение

Вы можете выдавать себя за пользователей только в домене приложений Google, для которого у вас есть необходимые разрешения (выполните поиск «делегирование по всему домену»). Вы это покрыли.

Получив разрешение на олицетворение, вы должны заново создать новый клиент Google для каждого пользователя, которого вы олицетворяете. Вы получите только токен доступа, который вы можете использовать для этого пользователя. Если вы просто измените адрес электронной почты после авторизации, он не будет работать.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]