Cómo autenticarse en cualquier API de Google

La consola de desarrolladores de Google puede ser complicada de hacer bien, y es una de las razones por las que a veces tengo resistencia a usar una de las API de Google. Este artículo tiene como objetivo simplificar su uso

Este artículo explica cómo utilizar Google Developers Console para autenticarse en cualquiera de las API de Google.

La consola de desarrolladores puede ser complicada de hacer bien, y es una de las razones por las que a veces tengo resistencia a usar una de las API de Google.

Veamos cómo funciona eso, de una manera muy sencilla.

Esta guía asume que ya tiene una cuenta de Google.

Cree un nuevo proyecto de API de Google

Cree un nuevo proyecto, si aún no lo ha hecho.

The Google API Dashboard

Desde el panel, haga clic enCrea un nuevo proyecto.

Create a new API project

Asígnele un nombre y será redirigido al panel del proyecto:

The new project dashboard

Agregue una API haciendo clic enHabilitar API y servicios.

The API library

De la lista, busque la API que le interese

Choose an API

y habilitarlo

Enable an API

¡Eso es!

The API is enabled

El proyecto ya está listo, puede continuar y crear las credenciales de autenticación.

Cree las credenciales de autenticación

Hay tres formas de autenticarse con las API de Google:

  • OAuth 2
  • Servicio a Servicio
  • Clave API

La clave API es menos segura y tiene un alcance y uso restringidos por parte de Google.

OAuth 2 está destinado a permitir que su aplicación realice solicitudes en nombre de un usuario y, como tal, el proceso es más complicado de lo necesario y requiere exponer las URL para manejar las devoluciones de llamada. Demasiado complejo para usos simples.

En un modelo de autenticación de servicio a servicio, la aplicación se comunica directamente con la API de Google, utilizando una cuenta de servicio, mediante un JSON Web Token.

Este es el método más simple, especialmente si está creando un prototipo o una aplicación que habla desde su servidor (como una aplicación Node.js) a las API de Google. Este es el único método del que hablaré para la prueba del artículo.

API de servicio a servicio

Para utilizar este método, primero debe generar unArchivo de clave JSONa través de Google Developers Console.

Hay otra opción que implica descargar un.p12archivo y luego convertirlo en unpemarchivo usando elopensslmando. Google ya no lo recomienda,solo usa JSON.

Desde el panel de un proyecto, haga clic enCrea credenciales, y eligeClave de cuenta de servicio:

Choose the type of credentials

Complete el formulario y elija un tipo de clave "JSON":

Fill the form for credentials

¡Eso es! Google le envió un archivo JSON:

The JSON file was saved

Este es el contenido de este archivo JSON, llamadoArchivo de clave JSON:

{
  "type": "service_account",
  "project_id": "...",
  "private_key_id": "...",
  "private_key": "...",
  "client_email": "...",
  "client_id": "...",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "..."
}

Usar el archivo de clave JSON

La forma más sencilla es poner el archivo JSON en algún lugar accesible para su programa, en el sistema de archivos.

Por ejemplo, tengo una aplicación de prueba en~/dev/test, así que puse el archivo JSON en esa carpeta y lo renombré aauth.json. Luego, dentro de una aplicación Node.js, asegúrese de que la variable de entorno GOOGLE_APPLICATION_CREDENTIALS apunte a esa ubicación de archivo en el sistema de archivos.

Tu creas unToken web JSONutilizando las propiedades contenidas en el archivo:

const jwt = new google.auth.JWT(key.client_email, null, key.private_key, scopes)

y lo pasa a cualquier solicitud de API que realice.

Este es un ejemplo de cómo usarlo con la API de Google Analytics.process.env.GOOGLE_APPLICATION_CREDENTIALSes mejor establecerlo fuera del programa, pero lo agregué en la fuente para mayor claridad:

'use strict'

const { google } = require(‘googleapis’)

const key = require(’./auth.json’) const scopes = https://www.googleapis.com/auth/analytics.readonly const jwt = new google.auth.JWT(key.client_email, null, key.private_key, scopes) const view_id = ‘XXXXXXX’

process.env.GOOGLE_APPLICATION_CREDENTIALS = ‘./auth.json’

jwt.authorize((err, response) => { google.analytics(‘v3’).data.ga.get( { auth: jwt, ids: ‘ga:’ + view_id, ‘start-date’: ‘30daysAgo’, ‘end-date’: ‘today’, metrics: ‘ga:pageviews’ }, (err, result) => { console.log(err, result) } ) })

Usa variables de entorno

Esto no es ideal en muchas situaciones en las que tener su información privada en el sistema de archivos no es práctico o no es seguro. Por ejemplo, si está utilizando Heroku, es mejor evitar poner las credenciales de autenticación en el repositorio y, en su lugar, configurarlas a través de la interfaz o consola que proporciona Heroku.

O es el caso de usarlo enFallaprototipos, donde las variables de entorno están ocultas para todos menos para usted.

En este caso, lo mejor es usar variables de entorno y almacenar el contenido que necesita del archivo JSON. En el siguiente ejemplo, todo lo que necesitamos son losclient_emailyprivate_keyvariables configuradas en JSON, por lo que podemos extraerlas y configurarlas como variables de entorno para mantenerlas privadas.

'use strict'

const { google } = require(‘googleapis’)

const scopes = https://www.googleapis.com/auth/analytics.readonly const jwt = new google.auth.JWT( process.env.CLIENT_EMAIL, null, process.env.PRIVATE_KEY, scopes ) const view_id = ‘XXXXXXX’

jwt.authorize((err, response) => { google.analytics(‘v3’).data.ga.get( { auth: jwt, ids: ‘ga:’ + view_id, ‘start-date’: ‘30daysAgo’, ‘end-date’: ‘today’, metrics: ‘ga:pageviews’ }, (err, result) => { console.log(err, result) } ) })

Accede a otras API

Usé Google Analytics en los ejemplos.

losgoogleel objeto lo hace accesible engoogle.analytics('v3').

v3es la versión de API.

Se puede acceder a otras API de forma similar:

  • google.urlshortener('v1')
  • google.drive('v2')

Más tutoriales de servicios: