webentwicklung-frage-antwort-db.com.de

Dienstanwendungen und Google Analytics API V3: Server-zu-Server-OAuth2-Authentifizierung?

Ich versuche, eine Serveranwendung zum routinemäßigen Abrufen von Google Analytics-Daten von meinem eigenen GA) Konto zu erstellen. Beachten Sie, dass es sich um eine persönliche, serverseitige Anwendung handelt, die auf meine eigenen Daten zugreift, dh Es gibt keinen Endbenutzer, der auf diese Anwendung zugreift.

Als solches habe ich meine Anwendung in der Google API Console als Dienstanwendung registriert, die mir eine Client-ID und ein privater Schlüssel . Nach meinem Verständnis verwenden Dienstanwendungen NICHT Application Secret und Redirect URL , da sich auf diesem Server kein Endbenutzer befindet. Ablauf der Serverauthentifizierung. Die Google API Console hat mir in der Tat kein Geheimnis verraten und mich nicht zur Eingabe einer Weiterleitungs-URL aufgefordert.

Leider kann ich nicht herausfinden, wie ich meine Dienstanwendung innerhalb von Google PHP Client API authentifizieren kann. Es gibt eine umfangreiche Dokumentation zur Authentifizierung von Webanwendungen mit einem Endbenutzer.

Die Dokumentation von Google schlägt vor, Server-zu-Server-Authentifizierung durch Signieren einer JWT-Anfrage mit dem privaten Schlüssel durchzuführen. Ich kann einfach nicht herausfinden, wie ich mit der PHP Client-API vorgehen soll (obwohl ich die Quelle durchsucht habe und es definitiv ein Skript gibt) unterschreibt eine Anfrage mit dem privaten Schlüssel.)

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

Der Übersichtlichkeit halber bearbeitet

60

UPDATE 21. Juli 2012

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

Derzeit werden 4 Jahre lang täglich Messdaten abgerufen, nur zum Teufel.

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

  1. Gehen Sie zu Google API Console und erstellen Sie eine neue App

  2. Aktivieren Sie auf der Registerkarte Services den Schalter Google Analytics

  3. Klicken Sie auf der Registerkarte API-Zugriff auf Erstellen Sie eine OAuth2.0-Client-ID

    • geben Sie Ihren Namen ein, laden Sie ein Logo hoch und klicken Sie auf Weiter

    • wählen Sie die Option Dienstkonto und drücken Sie Kunden-ID erstellen

    • laden Sie Ihren privaten Schlüssel herunter

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

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

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

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

  5. Holen Sie sich die neuesten 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);
    

Original Workaround unten


Trotz der mehrdeutigen Dokumentation scheint die meisten Google-APIs unterstützen noch keine Dienstkonten , einschließlich Google Analytics. Sie können keine OAuth2-Token verarbeiten, die von einer .p12-signierten JWT-Anforderung zurückgegeben wurden. Ab sofort können Sie Google Analytics API V3 nicht mit einem Dienstkonto verwenden.

Workaround:

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

  2. Befolgen Sie die Schritte in den Google PHP Client API Beispielen, um einen client_auth_url Mit Ihrem client_id, client_secret Zu generieren. , und redirect_uri

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

  4. Öffnen Sie den client_auth_url In cURL und füllen Sie das Formular aus. Stellen Sie sicher, dass Sie curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); und curl_setopt($ch, CURLOPT_HEADER, 1); so einstellen, dass authorization_code Im Location: - Header der Antwort steht.

  5. Senden Sie mit Ihrem client_id, client_secret, redirect_uri Und dem Aktivierungscode aus Schritt 4 eine Anfrage an Googles OAuth2-Token-Computer . Stellen Sie sicher, dass Sie grant_type = "authorization_code" In Ihre Post-Felder einfügen.

  6. Hurra, Sie haben jetzt einen refresh_token, Der niemals abläuft, und einen funktionierenden access_token! Senden Sie eine Anfrage an Googles OAuth2-Token-Maschine mit Ihrem client_id, client_secret, redirect_uri Und refresh_token, Wenn Ihr access_token Läuft ab und Sie erhalten einen neuen.

107

Das Google-API PHP Client unterstützt jetzt Dienstkonten für Amtsleitungen.

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

Ich habe eine Beispielanwendung erstellt, die zeigt, wie Sie mithilfe von Dienstkonten die Google Prediction-API aufrufen können. Schauen Sie sich das Beispiel unter examples/prediction/serviceAccount.php an oder besuchen Sie: http://code.google.com/p/google-api-php-client/source/browse/trunk/examples) /prediction/serviceAccount.php

4
Chirag Shah

Wenn Sie Googles PHP Client API verwenden, gehen Sie zu Google API Console und klicken Sie auf API Access links.

Dann Create a Client ID. Das gibt dir das secret und hier stellst du dein redirect URL. Sie erhalten keine Weiterleitungs-URL - das ist die URL, an die die App den Benutzer nach der Authentifizierung zurücksendet.

Es gibt andere Authentifizierungsmethoden die Sie anschauen können.

2
jk.

sie können eine sehr nützliche PHP-Bibliothek verwenden GAPI (Google Analytics API PHP Interface)), um ohne OAuth auf Google Analytics zuzugreifen. Es ist einfach benutzen.

2
Martin Lojek