php - tienes - Aplicaciones de servicio y Google Analytics API V3: ¿Autenticación OAuth2 de servidor a servidor?
oauth2 token (4)
Intento 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 un usuario final que acceda a esta aplicación.
Como tal, registré mi aplicación en la consola de la API de Google como una aplicación de servicio , que me dio una identificación de cliente y una clave privada . Entiendo que las aplicaciones de servicio NO usan Application Secret y Redirect URL ya que no hay un usuario final en este flujo de autenticación de servidor a servidor. De hecho, Google API Console no me dio ningún secreto y no me pidió una URL de redireccionamiento.
Lamentablemente, no puedo averiguar cómo autenticar mi aplicación de servicio dentro de la API de cliente PHP de Google . Existe una amplia documentación sobre la autenticación de aplicaciones web con un usuario final.
La documentación de Google sugiere que es posible autenticarse de servidor a servidor al firmar una solicitud JWT con la clave privada . Simplemente no puedo entender cómo hacerlo dentro de la API del cliente PHP (aunque he navegado por el código fuente y definitivamente hay un script que firma una solicitud con la clave privada).
¿Me estoy perdiendo de algo? ¿Cómo puedo realizar la autenticación para una aplicación de servicio con mi clave privada y la API del cliente de Google PHP?
Editado para mayor claridad
ACTUALIZACIÓN 21 de julio de 2012
Google Analytics API V3 ahora admite tokens OAuth2 devueltos por una solicitud JWT firmada por .p12. Es decir, ahora podemos usar la API de Analytics con cuentas de servicio .
Actualmente tira de 4 años de métricas diarias, solo por el placer de hacerlo.
Aquí hay un paso rápido ''n'' sucio:
Vaya a la consola API de Google y cree una nueva aplicación
En la pestaña Servicios , activa el interruptor Google Analytics
En la pestaña Acceso a la API , haz clic en Crear una ID de cliente OAuth2.0
ingrese su nombre, cargue un logotipo y haga clic en Siguiente
seleccione la opción Cuenta de servicio y presione Crear ID de cliente
descarga tu clave privada
Ahora estás de vuelta en la página de Acceso a la API . Verá una sección llamada Cuenta de servicio con una ID de cliente y una dirección de correo electrónico
Copie la dirección de correo electrónico (algo como ####@developer.gserviceaccount.com )
Visite su administrador de GA y agregue este correo electrónico como usuario a sus propiedades
Es un requisito; obtendrá errores crípticos de lo contrario.
Obtenga la última API de Google PHP Client a través de Github
git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only
Rock ''n'' roll (gracias a todos por sus consejos sobre los nombres actualizados de las clases):
// 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 aún no son compatibles con las cuentas de servicio , incluido Google Analytics. No pueden digerir tokens OAuth2 devueltos por una solicitud JWT firmada .p12. Por lo tanto, a partir de ahora, no puede usar Google Analytics API V3 con una cuenta de servicio .
Solución:
En la consola API de Google , crea una aplicación cliente .
Siga los pasos de los ejemplos de la API del cliente de Google PHP para generar un
client_auth_url
usando suclient_id
,client_secret
yredirect_uri
Ingresa a Google usando cURL. (¡Asegúrese de usar un archivo de cookies!)
Abra el
client_auth_url
en CURL y complete el formulario. Asegúrese de configurarcurl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
ycurl_setopt($ch, CURLOPT_HEADER, 1);
como elauthorization_code
estará en laLocation:
encabezado de la respuesta.Usando su
client_id
,client_secret
,redirect_uri
y el código de activación del Paso 4, publique una solicitud en la máquina Token OAuth2 de Google . Asegúrese de incluirgrant_type = "authorization_code"
en sus campos de publicación.¡Hurra, ahora tienes un
refresh_token
que nunca caduca y unaccess_token
trabajo! Publique una solicitud en la máquina Token OAuth2 de Google con suclient_id
,client_secret
,redirect_uri
yrefresh_token
cuandoaccess_token
suaccess_token
y obtendrá una nueva.
El API API de Google API ahora admite cuentas de servicio en el enlace troncal.
La implementación aún no se ha lanzado, por lo que deberá checkout la última versión del cliente PHP.
He preparado una aplicación de muestra 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 visite: http://code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccount.php
Si está utilizando la API del cliente PHP de Google, vaya a la Consola API de Google y haga clic en API Access
a la izquierda.
Luego Create a Client ID
. Eso le dará el secret
y es donde configura su redirect URL
. No le proporcionará una URL de redireccionamiento, que es la URL a la que la aplicación envía al usuario después de la autenticación.
Hay otros métodos de autenticación que puedes mirar.
puede utilizar la biblioteca php muy útil GAPI (Interfaz API API de Google Analytics) para acceder a Google Analytics sin OAuth. Es fácil de usar