it-swarm.com.ru

Приложения-службы и Google Analytics API V3: межсерверная аутентификация OAuth2?

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

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

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

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

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

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

60
moon prism power

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

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

В настоящее время тянет 4 года изо дня в день, , черт побери.

Вот быстрый пошаговый пошаговый шаг:

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

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

  3. На вкладке API Access нажмите Создать идентификатор клиента OAuth2.0

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

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

    • скачать свой закрытый ключ

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

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

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

    • Это обязательно; иначе вы получите загадочные ошибки.

  5. Получить последнюю версию Google PHP Client API через Github

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

    // 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. Таким образом, на данный момент вы не можете использовать Google Analytics API V3 с учетной записью службы .

Обход:

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

  2. Выполните шаги в примерах Google PHP Client API , чтобы сгенерировать 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, отправьте запрос на Google OAuth2 Token machine . Убедитесь, что вы включили grant_type = "authorization_code" в свои поля сообщений.

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

107
moon prism power

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

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

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

4
Chirag Shah

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

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

Есть другие способы аутентификации вы можете посмотреть.

2
jk.

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

2
Martin Lojek