php management - Serviceanwendungen und Google Analytics API V3:Server-zu-Server-OAuth2-Authentifizierung?




reports reporting (5)

Ich versuche, eine Server-Anwendung zu erstellen, um routinemäßig Google Analytics-Daten aus meinem eigenen GA-Konto abzurufen. Beachten Sie, dass es sich um eine persönliche, serverseitige Anwendung handelt, die auf meine eigenen Daten zugreift, dh, dass kein Endbenutzer auf diese Anwendung zugreift.

Daher habe ich meine Anwendung in der Google API-Konsole als Dienstanwendung registriert, die mir eine Client-ID und einen privaten Schlüssel gab . Ich verstehe, dass Dienstanwendungen KEINE Anwendungsgeheimnisse verwenden und URLs nicht weiterleiten, da in diesem Server-zu-Server-Authentifizierungsablauf kein Endbenutzer vorhanden ist. Tatsächlich gab mir die Google API Console kein Secret und forderte mich nicht auf, eine Weiterleitungs-URL anzugeben.

Leider kann ich nicht herausfinden, wie ich meine Serviceanwendung in der PHP-Client-API von Google authentifizieren kann. Es gibt umfangreiche Dokumentationen zum Authentifizieren von Webanwendungen mit einem Endbenutzer.

Die Dokumentation von Google schlägt vor, dass es möglich ist, Server-zu-Server zu authentifizieren, indem eine JWT-Anfrage mit dem privaten Schlüssel signiert wird . Ich kann einfach nicht herausfinden, wie man innerhalb der PHP-Client-API vorgeht (obwohl ich die Quelle durchsucht habe und es definitiv ein Skript gibt , das eine Anfrage mit dem privaten Schlüssel signiert.)

Fehle ich hier etwas? Wie kann ich die Authentifizierung für eine Dienstanwendung mit meinem privaten Schlüssel und der Google PHP-Client-API durchführen?

Bearbeitet für Klarheit


Answers

UPDATE 21. Juli 2012

Google Analytics API V3 unterstützt nun OAuth2-Token, die von einer .p12-signierten JWT-Anfrage zurückgegeben werden. Das heißt, wir können jetzt die Analytics-API mit Dienstkonten verwenden .

Derzeit ziehen 4 Jahre täglicher Messdaten nur zum Teufel.

Hier ist eine kurze 'n' schmutzige Schritt-für-Schritt-Anleitung:

  1. Gehe zur Google API-Konsole und erstelle eine neue App

  2. Doppelklicken Sie auf der Registerkarte Dienste den Google Analytics- Schalter

  3. Klicken Sie auf der Registerkarte API-Zugriff auf Eine OAuth2.0-Client-ID erstellen

    • Gib deinen Namen ein, lade ein Logo hoch und klicke auf Weiter

    • Wählen Sie die Option Dienstkonto, und drücken Sie Client-ID erstellen

    • Lade deinen privaten Schlüssel herunter

  4. Jetzt sind Sie wieder auf der API-Zugriffsseite . Sie sehen einen Abschnitt namens Dienstkonto mit einer Client-ID und einer E-Mail-Adresse

    • Kopieren Sie die E-Mail-Adresse (etwas wie ####@developer.gserviceaccount.com )

    • Besuchen Sie Ihren GA-Administrator und fügen Sie diese E-Mail als Nutzer zu Ihren Eigenschaften hinzu

    • Das ist ein Muss; Sie werden sonst kryptische Fehler bekommen.

  5. Holen Sie sich die neueste Google PHP Client API über Github

    git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only
    
  6. Rock 'n' Roll (Danke an alle für Tipps zu aktualisierten Klassennamen):

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

ursprüngliche Problemumgehung unten

Offensichtlich unterstützen die meisten Google APIs trotz mehrdeutiger Dokumentation noch keine Dienstkonten , einschließlich Google Analytics. Sie können OAuth2-Token nicht verarbeiten, die von einer signierten JWT-Anfrage mit der Endung .p12 zurückgegeben wurden. Daher können Sie Google Analytics API V3 ab sofort nicht mit einem Dienstkonto verwenden .

Problemumgehung:

  1. Erstellen Sie in der Google API-Konsole eine Clientanwendung .

  2. client_auth_url Sie die Schritte in den Google PHP Client API- Beispielen aus, um eine client_auth_url mithilfe Ihrer client_id , client_secret und redirect_uri zu generieren

  3. Melden Sie sich mit cURL bei Google . (Verwenden Sie unbedingt eine Cookie-Datei!)

  4. Öffnen Sie die client_auth_url in cURL und client_auth_url das Formular aus. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); Sie sicher, dass Sie curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); und curl_setopt($ch, CURLOPT_HEADER, 1); Der authorization_code befindet sich im Header Location: der Antwort.

  5. client_id Sie mit client_id , client_secret , redirect_uri und dem Aktivierungscode aus Schritt 4 eine Anfrage an den Google OAuth2-Token-Computer . grant_type = "authorization_code" Sie sicher, dass Sie grant_type = "authorization_code" in Ihre Post-Felder grant_type = "authorization_code" .

  6. Hurra, Sie haben jetzt ein refresh_token , das niemals abläuft, und ein funktionierendes access_token ! Senden Sie eine Anfrage an den Google OAuth2-Token-Computer mit Ihrer client_id , client_secret , redirect_uri und refresh_token wenn Ihr access_token abläuft und Sie einen neuen erhalten.


Sie können sehr nützliche PHP-Bibliothek GAPI (Google Analytics API PHP-Schnittstelle) verwenden, um auf Google Analytics ohne OAuth zuzugreifen. Es ist einfach zu bedienen.


Der Google API PHP-Client unterstützt jetzt Dienstkonten auf Trunk.

Die Implementierung wurde noch nicht veröffentlicht, daher müssen Sie die neueste Version des PHP-Clients auschecken.

Ich habe eine Beispielanwendung vorbereitet, in der gezeigt wird, wie Sie mithilfe von Dienstkonten die Google Prediction API erreichen können. Um das Beispiel zu sehen, werfen Sie einen Blick auf examples / prediction / serviceAccount.php oder besuchen Sie http://code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccount.php







php google-api oauth-2.0 google-analytics-api jwt