Подтвердить что ты не робот

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

В настоящее время вытягивает 4 года ежедневных показателей, просто для этого.

Здесь быстрый "n" грязный шаг за шагом:

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

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

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

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

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

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

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

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

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

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

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

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

    // 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);
    

 

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


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

Обход проблемы:

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

  • Следуйте инструкциям в API API Google PHP, чтобы создать client_auth_url, используя client_id, client_secret, и redirect_uri

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

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