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

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

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

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

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

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

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

Ответы [ 4 ]

107 голосов
/ 10 апреля 2012

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

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

В настоящее время используются 4-дневные ежедневные метрики, просто так, черт возьми.

Вот краткое пошаговое пошаговое руководство:

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

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

  3. В Доступ к API , вкладка, нажмите Создайте идентификатор клиента OAuth2.0

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

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

    • загрузить свой личныйклавиша

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

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

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

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

  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 .Убедитесь, что вы включили grant_type = "authorization_code" в свои поля сообщений.

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

4 голосов
/ 26 марта 2012

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

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

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

2 голосов
/ 20 сентября 2012

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

2 голосов
/ 26 марта 2012

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

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

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

...