Applications de Service et API Google Analytics V3: authentification OAuth2 de serveur à serveur?

J'essaie de créer une application serveur pour extraire régulièrement des données Google Analytics de mon propre compte GA. Notez que c'est une application personnelle côté serveur qui accède à mes propres données, c'est-à-dire Aucun utilisateur final n'accède à cette application.

En tant que tel, j'ai enregistré mon application dans la Console Google API en tant qu'Application de Service , ce qui m'a donné un ID Client et une Clé privée. Je crois comprendre que les Applications de Service n'utilisent pas Application Secret et rediriger L'URL car il n'y a pas d'utilisateur final dans ce flux d'authentification de serveur à serveur. En effet, la Console API Google ne m'a donné aucun Secret et ne m'a pas invité pour une URL de redirection.

Malheureusement, je ne peux pas comprendre comment authentifier mon Application de Service dans API Client PHP de Google . Il existe une documentation complète sur l'authentification des applications web avec un utilisateur final.

La documentation de Google suggère Il est possible d'authentifier serveur à serveur en signant une requête JWT avec la clé privée . Je n'arrive tout simplement pas à comprendre comment faire dans L'API du client PHP (bien que j'aie parcouru la source et qu'il y ait définitivement un script qui signe une requête avec la clé privée.)

Est-ce que je manque quelque chose ici? Comment puis-je effectuer l'authentification pour une Application de Service avec ma clé privée et L'API Client Google PHP?

Édité pour plus de clarté

60
demandé sur moon prism power 2012-03-26 00:00:47

4 réponses

Mise à jour le 21 juillet 2012

Google Analytics API v3 prend désormais en charge les jetons OAuth2 renvoyés par un .P12-demande JWT signée. Autrement dit, nous pouvons maintenant utiliser L'API Analytics avec les comptes de service .

En train de tirer 4 ans de métriques de jour en jour, juste pour l'enfer de celui-ci.

Voici un rapide ' n ' sale étape par étape:

  1. Accédez à la Console Google API et créez une nouvelle application

  2. Dans le Services onglet, retournez leGoogle Analytics commutateur

  3. Dans l'onglet accès API, cliquez sur créer un ID Client OAuth2. 0

    • Entrez votre nom, télécharger un logo, et cliquez sur Prochaine

    • Sélectionnez la compte de Service, puis sur Créer un IDENTIFIANT client

    • Le Téléchargement de votre clé privée

  4. Maintenant, vous êtes de retour sur L'API Accès à la page . Vous verrez une section appelée compte de Service avec ID de Client et adresse e-Mail

    • Copier l'adresse e-mail (quelque chose comme ####@developer.gserviceaccount.com)

    • Visitez votre GA Admin et ajouter cet e-mail en tant qu'utilisateur de votre propriété

    • C'est un must; Vous obtiendrez des erreurs cryptiques sinon.

  5. Obtenez les dernières Google PHP Client API via Github

    git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only
    
  6. Rock ' N ' roll (merci à tous pour des conseils sur les noms de classe mis à jour):

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

 

solution de contournement originale ci-dessous


Il semble que, malgré une documentation ambiguë, la plupart des API Google le font pas encore de comptes de service de support, y compris Google Analytics. Ils impossible de digérer les jetons OAuth2 renvoyés par un .P12 demande JWT signée. Si, comme en ce moment, vous ne pouvez pas utiliser Google Analytics API V3 avec un compte de service .

Solution de Contournement:

  1. Dans la console Google API , créez une applicationclient .

  2. Suivez les étapes de Google PHP Client API exemples pour générer un client_auth_url en utilisant votre client_id, client_secret, et redirect_uri

  3. Connectez-vous à Google en utilisant cURL. (Assurez-vous d'utiliser un cookie fichier!)

  4. Ouvrez le client_auth_url dans cURL et remplissez le formulaire. Assurez-vous de définir curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); et curl_setopt($ch, CURLOPT_HEADER, 1); comme authorization_code sera dans l'en-tête Location: de la réponse.

  5. Utilisation de votre client_id, client_secret, redirect_uri, et le code d'activation de L'Étape 4, postez une requête à L'OAuth2 de Google Machine à jetons . Assurez-vous d'inclure grant_type = "authorization_code" dans vos champs de publication.

  6. Hourra, vous avez maintenant un refresh_token, ce qui n'expire jamais, et un travail access_token! Poster un demande au jeton OAuth2 de Google machine, avec votre client_id, client_secret, redirect_uri, et refresh_token lorsque votre access_token expire et vous obtiendrez un nouveau.

107
répondu moon prism power 2014-01-07 22:53:56

Le Client PHP API Google prend désormais en charge les comptes de service sur le tronc.

L'implémentation n'a pas encore été publiée, vous devrez donc checkout la dernière version du client PHP.

J'ai préparé un exemple d'application qui montre comment vous pouvez utiliser les comptes de service pour accéder à L'API de prédiction Google. Pour voir l'exemple, jetez un coup d'œil à examples/prediction/serviceAccount.php ou visiter: http://code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccount.php

4
répondu Chirag Shah 2012-03-26 16:40:05

Si vous utilisez L'API Client PHP de Google , allez dans la ConsoleGoogle API et cliquez sur API Access à gauche.

, Puis Create a Client ID. Qui vous donnera la secret et c'est là que vous définissez votre redirect URL. Il ne vous donnera pas une URL de redirection - c'est L'URL à laquelle l'application renvoie l'utilisateur après l'authentification.

Il y a d'autres méthodes d'authentification que vous pouvez regarder.

2
répondu jk. 2012-03-25 21:15:00

Vous pouvez utiliser la bibliothèque php très utile GAPI (Interface PHP API Google Analytics) pour accéder à Google Analytics sans OAuth. Il est facile à utiliser.

2
répondu Martin Lojek 2012-09-19 21:34:54