Службы приложений и API Google Analytics V3: Аутентификация OAuth2 от сервера к серверу?

Я пытаюсь заставить серверное приложение регулярно извлекать данные Google Analytics из моей собственной учетной записи GA. Обратите внимание, что это личное приложение на стороне сервера, использующее мои собственные данные, т. Е. Для этого приложения нет конечного пользователя.

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

К сожалению, я не могу понять, как аутентифицировать свое приложение-приложение в API-интерфейсе PHP для PHP . Существует обширная документация по аутентификации веб-приложений с конечным пользователем.

Документация Google предполагает, что можно аутентифицировать сервер-сервер, подписывая запрос JWT с помощью закрытого ключа . Я просто не могу понять, как это сделать в API-интерфейсе PHP (хотя я просматривал источник и, безусловно, есть скрипт, который подписывает запрос с помощью закрытого ключа.)

Я что-то упустил? Как выполнить проверку подлинности для приложения-службы с помощью моего личного ключа и API-интерфейса Google PHP?

Отредактировано для ясности

ОБНОВЛЕНИЕ 21 июля 2012 г.

API Google Analytics V3 теперь поддерживает токены OAuth2, возвращенные запросом JWT с подпиской .p12. То есть теперь мы можем использовать учетные записи API API / службы .

В настоящее время вытягивает 4 года изо дня в день метрики, только для ада.

Ниже приведен краткий «n» грязный шаг за шагом:

  1. Перейдите в консоль Google API и создайте новое приложение.

  2. На вкладке « Службы » переверните переключатель Google Analytics

  3. На вкладке « Доступ к API » нажмите « Создать идентификатор клиента OAuth2.0».

    • введите свое имя, загрузите логотип и нажмите « Далее».

    • выберите опцию « Учетная запись службы» и нажмите « Создать идентификатор клиента»

    • скачать секретный ключ

  4. Теперь вы снова на странице доступа к API . Вы увидите раздел « Учетная запись службы» с идентификатором клиента и адресом электронной почты

    • Скопируйте адрес электронной почты (что-то вроде ####@developer.gserviceaccount.com )

    • Посетите свой администратор GA и добавьте это письмо как пользователь в свои свойства

    • Это необходимо; в противном случае вы получите критические ошибки.

  5. Получите последний API-интерфейс API Google PHP через Github

    git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only 
  6. Rock 'n' roll (спасибо всем за советы по обновленным именам классов):

     // api dependencies require_once(PATH_TO_API . 'Google/Client.php'); require_once(PATH_TO_API . 'Google/Service/Analytics.php'); // create client object and set app name $client = new Google_Client(); $client->setApplicationName(APP_NAME); // name of your app // set assertion credentials $client->setAssertionCredentials( new Google_Auth_AssertionCredentials( APP_EMAIL, // email you added to GA array('https://www.googleapis.com/auth/analytics.readonly'), file_get_contents(PATH_TO_PRIVATE_KEY_FILE) // keyfile you downloaded )); // other settings $client->setClientId(CLIENT_ID); // from API console $client->setAccessType('offline_access'); // this may be unnecessary? // create service and get data $service = new Google_Service_Analytics($client); $service->data_ga->get($ids, $startDate, $endDate, $metrics, $optParams); 

оригинальное обходное решение ниже


Похоже, что, несмотря на неоднозначную документацию, большинство API Google еще не поддерживают учетные записи служб , включая Google Analytics. Они не могут переваривать токены OAuth2, возвращенные запросом JWT с подпиской .p12. Итак, на данный момент вы не можете использовать API Google Analytics V3 с учетной записью службы .

Временное решение:

  1. В консоли Google API создайте клиентское приложение.

  2. Выполните действия, client_secret примерах API-интерфейсов Google PHP, чтобы создать client_auth_url используя client_id , client_secret и redirect_uri

  3. Войдите в Google, используя cURL. (Обязательно используйте файл cookie!)

  4. Откройте client_auth_url в cURL и заполните форму. Убедитесь, что вы установили curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); и curl_setopt($ch, CURLOPT_HEADER, 1); поскольку authorization_code будет в заголовке Location: ответ.

  5. Используя client_id , client_secret , redirect_uri и код активации с шага 4, отправьте запрос на маркер OAuth2 для Google . Убедитесь, что в почтовых полях включено grant_type = "authorization_code" .

  6. Ура, у вас теперь есть refresh_token который никогда не истекает, и рабочий access_token ! Отправьте запрос на маркер OAuth2 Google с вашими client_id , client_secret , redirect_uri и refresh_token когда access_token срок вашего access_token и вы получите новый.

Клиент API API Google теперь поддерживает учетные записи служб на соединительной линии.

Реализация еще не выпущена, поэтому вам нужно будет проверить последнюю версию клиента PHP.

Я подготовил пример приложения, демонстрирующий, как вы можете использовать учетные записи службы, чтобы попасть в API Google Prediction. Чтобы просмотреть пример, загляните в примеры / предсказание / serviceAccount.php или посетите http://code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccount .php

Если вы используете API-интерфейс клиента PHP Google, перейдите в Консоль API Google и нажмите « API Access слева.

Затем Create a Client ID . Это даст вам secret и именно там вы установите redirect URL . Он не даст вам URL-адреса переадресации – это URL-адрес, по которому приложение отправляет пользователя обратно после аутентификации.

Существуют другие методы проверки подлинности, на которые вы можете посмотреть.

вы можете использовать очень полезную библиотеку php GAPI (API-интерфейс API Google Analytics API) для доступа к Google Analytics без OAuth. Он прост в использовании.