was successfully added to your cart.

Como solicitar acceso a la cuenta de un usuario con Oauth 2.0 y PHP

No voy a decir que en la documentación de Google no venga explicado, porque viene, pero a veces resulta complicado seguir el hilo debido a que viene todo desglosado por muchas partes.

Lo que yo voy a explicar te dará acceso para lo siguiente:

  • Solicitar acceso a un Scope de un usuario. Un Scope no es mas que un acceso de Lectura/Escritura a un servicio de Google(Analytics, Google Search….), puedes ver todos los scopes de los servicios de Google aquí.
  • Recoger un access_token y un refresh_token que te permita utilizar para siempre el servicio del usuario sin necesidad de volver a solicitar acceso. (Siempre y cuando el usuario no cancele el permiso desde su cuenta)
  • Actualizar el access_token con el refresh_token una vez que se caduque y poder volver a usar el servicio.

 

Requerimiento, pasos previos, antes de ponernos con el código:

  • Necesitamos un client_id y un secret, esto se configura en Cloud Console.
  • Tener habilitados los servicios de API en Cloud Console que vamos a utilizar.
  • Necesitamos tener instalada la librería de servicios de Google para PHP.

 

Pasos previos:

1- Obtener client_id y secret en Cloud Console.

Para ello vamos a la pagina de credenciales de Google Cloud Console y creamos una nueva autorización de Id De cliente de Oauth:

En la selección de tipo de cliente, elegiremos Web. Y pondremos la URL de redirección tal y como la pongo a continuación.

Como vemos, en la URIs de redireccion autorizados he puesto: http://TUDOMINIO.COM/oauth2callback.php

Donde dice TUDOMINIO.COM introducimos nuestro dominio. Hablaremos del fichero oauth2callback.php cuando vayamos a crearlo.

Una vez creado, nos proporcionará el ID de Cliente y el SECRET (Esta clave de a continuación es de prueba y no funciona, debéis crear las vuestras) :

Ahora creamos un fichero en el servidor “client_secrets.json” con la siguiente información, para este ejemplo debe estar en la raiz, modificad los campos client_id, client_secret y redirect_uris:

 

2. Tener habilitados los servicios de API en Cloud Console que vamos a utilizar.

Debemos habilitar las APIs que vayamos a usar en la biblioteca de Google Cloud Console. Buscamos por el Servicio que vayamos a usar y lo habilitamos.

 

3. Necesitamos tener instalada la librería de servicios de Google para PHP

Voy a obviar que tienes ya las librerías de Google Services dentro de la carpeta vendor y que lo has actualizado con composer. Si este paso no lo has hecho, hazlo, puedes seguir la siguiente documentación para instalar la librería de servicios de Google aquí.

 

Ahora vamos a la parte en la que solicitamos el acceso a un usuario para usar sus datos a través de la API.

Como solicitar acceso a un Scope de un usuario y cual es el codigo que debo utilizar.

Creamos un fichero “index.php” con el siguiente código, leed bien los pasos para comprender que queremos conseguir:

El primer paso de cargar las librerías ya lo tenemos con la linea

Vamos al segundo paso. Verificar si para el usuario que está utilizando nuestra web ya le solicitamos acceso en algún momento, si ya solicitamos acceso tendremos almacenados su último access_token y su refresh_token.

Vamos a explicar para que sirven el access_token y para que es el refresh_token.

El access_token, como su palabra indica nos permite acceder a los datos de los servicios del usuario al que corresponde. Este access_token tiene un tiempo de vida, pasado ese tiempo de vida no sirve para nada.
El refresh_token, nos permite actualizar de manera “offline”, sin necesidad de ninguna acción por parte del usuario, un nuevo access_token.

 

Teniendo claros esos conceptos, vamos al paso 2.

Vamos a suponer que no disponemos del access_token ni  del refresh_token, vamos al paso 3 para solicitar al usuario acceso al servicio.

Para ello usamos el siguiente código:

Aquí necesitamos crear otro fichero llamado oauth2callback.php con el siguiente codigo:

 

Con el access_token ya podremos realizar las funciones que queramos.

Bastará con crear un “client” de Google Services. Con el siguiente codigo:

Con esto ya tenemos funcionando nuestra app y recogiendo los datos del cliente.