web-dev-qa-db-fra.com

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 les données Google Analytics de mon propre compte GA. Remarque, il s'agit d'une application personnelle côté serveur accédant à mes propres données, par exemple il n'y a aucun utilisateur final accédant à cette application.

En tant que tel, j'ai enregistré mon application dans la Google API Console 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 Secret d'application et URL de redirection 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 demandé d'URL de redirection.

Malheureusement, je ne peux pas comprendre comment authentifier mon application de service dans Google PHP API client . 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 de serveur à serveur en signant une requête JWT avec la clé privée . Je n'arrive pas à comprendre comment faire dans l'API client PHP (bien que j'aie parcouru la source et qu'il y ait certainement un script qui signe une demande avec le Clé privée.)

Est-ce que j'ai râté quelque chose? Comment puis-je effectuer l'authentification pour une application de service avec ma clé privée et l'API client Google PHP?

Modifié pour plus de clarté

60
moon prism power

MISE À JOUR 21 juillet 2012

L'API Google Analytics V3 prend désormais en charge les jetons OAuth2 renvoyés par une demande JWT signée .p12. Autrement dit, nous pouvons maintenant utiliser l'API Analytics avec des comptes de service .

Tirant actuellement 4 ans de mesures quotidiennes, juste pour l'enfer.

Voici une rapide étape par étape:

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

  2. Dans l'onglet Services, actionnez le commutateur Google Analytics

  3. Dans l'onglet API Access, cliquez sur Créez un ID client OAuth2.0

    • entrez votre nom, téléchargez un logo et cliquez sur Suivant

    • sélectionnez l'option Compte de service et appuyez sur Créer l'ID client

    • téléchargez votre clé privée

  4. Vous êtes maintenant de retour sur la page API Access. Vous verrez une section intitulée Compte de service avec un ID client et Adresse e-mail

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

    • Visitez votre GA Admin et ajoutez cet e-mail en tant qu'utilisateur à vos propriétés

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

  5. Obtenez la dernière --- Google PHP API client 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 originale ci-dessous


Il semble que, malgré une documentation ambiguë, la plupart des API Google ne prennent pas encore en charge les comptes de service , y compris Google Analytics. Ils ne peuvent pas digérer les jetons OAuth2 renvoyés par une demande JWT signée .p12. Donc, en ce moment, vous ne pouvez pas utiliser l'API Google Analytics V3 avec un compte de service.

Solution:

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

  2. Suivez les étapes des exemples Google PHP Client API 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 fichier cookie!)

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

  5. En utilisant votre client_id, client_secret, redirect_uri Et le code d'activation de l'étape 4, envoyez une demande à la machine à jetons OAuth2 de Google . Assurez-vous d'inclure grant_type = "authorization_code" Dans vos champs de publication.

  6. Hourra, vous avez maintenant un refresh_token Qui n'expire jamais, et un access_token Fonctionnel! Envoyez une demande à la machine à jetons OAuth2 de Google avec votre client_id, client_secret, redirect_uri Et refresh_token Lorsque votre access_token Expire et vous en obtiendrez un nouveau.

107
moon prism power

L'API Google PHP Client 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 client.

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

4
Chirag Shah

Si vous utilisez Google PHP API client alors allez dans Google API Console et cliquez sur API Access à gauche.

Ensuite Create a Client ID. Cela vous donnera le secret et c'est là que vous définissez votre redirect URL. Il ne vous donnera pas d'URL de redirection - c'est l'URL à laquelle l'application renvoie l'utilisateur après l'authentification.

Il existe autres méthodes d'authentification que vous pouvez consulter.

2
jk.

vous pouvez utiliser une bibliothèque php très utile GAPI (API Google Analytics PHP) pour accéder à Google Analytics sans OAuth. C'est facile utiliser.

2
Martin Lojek