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é
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:
-
Accédez à la Console Google API et créez une nouvelle application
-
Dans le Services onglet, retournez leGoogle Analytics commutateur
-
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
-
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.
-
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
-
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:
Dans la console Google API , créez une applicationclient .
Suivez les étapes de Google PHP Client API exemples pour générer un
client_auth_url
en utilisant votreclient_id
,client_secret
, etredirect_uri
Connectez-vous à Google en utilisant cURL. (Assurez-vous d'utiliser un cookie fichier!)
Ouvrez le
client_auth_url
dans cURL et remplissez le formulaire. Assurez-vous de définircurl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
etcurl_setopt($ch, CURLOPT_HEADER, 1);
commeauthorization_code
sera dans l'en-têteLocation:
de la réponse.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'incluregrant_type = "authorization_code"
dans vos champs de publication.Hourra, vous avez maintenant un
refresh_token
, ce qui n'expire jamais, et un travailaccess_token
! Poster un demande au jeton OAuth2 de Google machine, avec votreclient_id
,client_secret
,redirect_uri
, etrefresh_token
lorsque votreaccess_token
expire et vous obtiendrez un nouveau.
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
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.
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.