Aplicaciones de servicio y API de Google Analytics V3: ¿Autenticación OAuth2 de servidor a servidor?


Estoy tratando de hacer una aplicación de servidor para extraer rutinariamente datos de Google Analytics de mi propia cuenta de GA. Tenga en cuenta que es una aplicación personal del lado del servidor que accede a mis propios datos, es decir, no hay ningún usuario final que acceda a esta aplicación.

Como tal, registré mi aplicación en Google API Console como una Aplicación de Servicio , que me dio un ID de cliente y una Clave Privada . Tengo entendido que las Aplicaciones de Servicio NO utilizan Application Secretand Redirect URL as there is no end-user in this server-to-server authentication flow. De hecho, la consola de la API de Google no me dio ningún secreto y no me pidió una URL de redirección.

Desafortunadamente, no puedo averiguar cómo autenticar mi Aplicación de Servicio dentro de API de Cliente PHP de Google. Existe una extensa documentación sobre la autenticación de aplicaciones web con un usuario final.

La documentación de Google sugiere que es posible autenticar de servidor a servidor firmando una solicitud JWT con la clave privada . Simplemente no puedo averiguar cómo hacerlo dentro de la API de cliente PHP (aunque he navegado por el código fuente y hay definitivamente un script que firma una solicitud con la clave privada.)

¿Me estoy perdiendo algo aquí? ¿Cómo puedo realizar la autenticación de una Aplicación de Servicio con mi clave privada y la API de cliente PHP de Google?

Editado para mayor claridad

Author: moon prism power, 2012-03-26

4 answers

ACTUALIZACIÓN 21 de julio de 2012

Google Analytics API V3 ahora admite tokens OAuth2 devueltos por a .p12-solicitud JWT firmada. Es decir, ahora podemos usar la API de Analytics con cuentas de servicio.

Actualmente tirando 4 años de métricas día a día, solo por el infierno de ello.

Aquí hay un rápido ' n ' sucio paso a paso:

  1. Vaya a Google API Console y cree una nueva aplicación

  2. En el Servicios pestaña, voltear el Google Analytics cambiar

  3. En la pestaña API Access , haga clic en Crear un ID de cliente OAuth2.0

    • Ingrese su nombre, cargue un logotipo y haga clic en Siguiente

    • Seleccione la opción Service account y presione Create client ID

    • Descargue su clave privada

  4. Ahora estás de vuelta en la API Access página. Verás una sección llamada Cuenta de servicio con un ID de cliente y una dirección de correo electrónico

    • Copiar la dirección de correo electrónico (algo como ####@developer.gserviceaccount.com)

    • Visite su GA Admin y agregue este correo electrónico como usuario a sus propiedades

    • Esto es una necesidad; de lo contrario, obtendrás errores crípticos.

  5. Obtener la última API de cliente PHP de Google a través de Github

    git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only
    
  6. Rock ' n ' roll (gracias a todos por los consejos sobre los nombres de clase actualizados):

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

 

solución original a continuación


Parece que, a pesar de la documentación ambigua, la mayoría de las API de Google lo hacen aún no se admiten cuentas de servicio, incluido Google Analytics. Le no se pueden digerir los tokens OAuth2 devueltos por a .p12 firmado JWT solicitud. Tan, como en este momento, no puede utilizar Google Analytics API V3 con un cuenta de servicio.

Solución alternativa:

  1. En Google API console, cree una aplicación client.

  2. Siga los pasos en los ejemplos de Google PHP Client API para generar un client_auth_url usando su client_id, client_secret, y redirect_uri

  3. Inicie sesión en Google usando cURL. (Asegúrese de usar una cookie archivo!)

  4. Abra el client_auth_url en cURL y complete el formulario. Asegúrese de establecer curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); y curl_setopt($ch, CURLOPT_HEADER, 1); como el authorization_code estará en el encabezado Location: de la respuesta.

  5. Usando su client_id, client_secret, redirect_uri, y el código de activación del Paso 4, publicar una solicitud a la OAuth2 de Google Token machine . Asegúrate de incluir grant_type = "authorization_code" en tus campos de publicación.

  6. ¡Hurra, ahora tienes un refresh_token que nunca caduca, y un access_token que funciona! Puesto a solicitud al Token OAuth2 de Google máquina con su client_id, client_secret, redirect_uri, y refresh_token cuando su access_token expira y obtendrá un uno nuevo.

 107
Author: moon prism power,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-07 22:53:56

El cliente PHP de la API de Google ahora admite cuentas de servicio en trunk.

La implementación aún no ha sido lanzada, por lo que necesitará checkout la última versión del cliente PHP.

He preparado una aplicación de ejemplo que demuestra cómo puede usar las cuentas de servicio para acceder a la API de predicción de Google. Para ver el ejemplo, eche un vistazo a examples/prediction/ServiceAccount.php o visitar: http://code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccount.php

 4
Author: Chirag Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-26 16:40:05

Si está utilizando la API de cliente PHP de Google, vaya a la Consola de API de Google y haga clic en API Access a la izquierda.

Luego Create a Client ID. Eso te dará el secret y es donde pones tu redirect URL. No te dará una URL de redirección, que es la URL a la que la aplicación envía al usuario después de autenticarse.

Hay otros métodos de autenticación que puede ver.

 2
Author: jk.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-25 21:15:00

Puede utilizar una biblioteca php muy útil GAPI (Interfaz PHP de la API de Google Analytics) para acceder a Google Analytics sin OAuth. Es fácil de usar.

 2
Author: Martin Lojek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-19 21:34:54