Cliente OAuth para PHP: integración con Google, GitHub y VK

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cliente OAuth para PHP: guía completa de integración



En el desarrollo web moderno, OAuth (Open Authorization) se ha convertido en el estándar de facto para organizar el inicio de sesión a través de servicios de terceros. El cliente OAuth para PHP permite a sus usuarios autenticarse en su sitio web mediante cuentas de Google, GitHub, VKontakte y otros proveedores, sin necesidad de crear un registro separado.



En este artículo, analizaremos la popular librería PHP League OAuth2 Client, que proporciona una interfaz unificada para trabajar con varios proveedores OAuth2.



¿Qué es OAuth2 y por qué es necesario?



OAuth2 es un protocolo de autorización que permite delegar el acceso a los recursos del usuario. En lugar de almacenar contraseñas de servicios de terceros, usted obtiene un token de acceso temporal. Las principales ventajas son:



  • Seguridad — las contraseñas de los usuarios no se transmiten a su aplicación
  • Comodidad — los usuarios inician sesión con un solo clic
  • Confianza — menor riesgo de filtración de datos
  • Datos adicionales — se puede obtener correo electrónico, nombre, avatar y otra información


Instalación de la librería League OAuth2 Client



Para trabajar con OAuth2 en PHP, se recomienda utilizar el paquete oficial league/oauth2-client. La instalación se realiza a través de Composer:



composer require league/oauth2-client


Para proveedores específicos, se necesitarán paquetes adicionales. Por ejemplo:



composer require league/oauth2-google      # Googlecomposer require league/oauth2-github       # GitHubcomposer require digitalcloud/oauth2-vk     # VK (no oficial)


Arquitectura básica del cliente OAuth2



Cualquier cliente OAuth2 funciona según el siguiente esquema:



  1. El usuario hace clic en el botón «Iniciar sesión con el proveedor»
  2. Su aplicación redirige al usuario a la página de autorización del proveedor
  3. El usuario confirma el acceso
  4. El proveedor devuelve un código de autorización a su URI de callback
  5. Su aplicación intercambia el código por un token de acceso
  6. Con el token, obtiene los datos del usuario desde la API del proveedor


Ejemplo de integración con Google



Veamos un ejemplo de trabajo completo para la autorización a través de Google. Primero, cree un proyecto en Google Cloud Console y obtenga un Client ID y un Client Secret.



Estructura de archivos:

  • config.php — configuración de la aplicación
  • login.php — página de inicio de sesión
  • callback.php — manejador de la respuesta de Google


config.php



<?php// Configuración OAuth para Googledefine('GOOGLE_CLIENT_ID', 'su_client_id.apps.googleusercontent.com');define('GOOGLE_CLIENT_SECRET', 'su_client_secret');define('GOOGLE_REDIRECT_URI', 'https://su-sitio.com/callback.php');

// Incluir la libreríarequire_once 'vendor/autoload.php';

use League\\OAuth2\\Client\\Provider\\Google;

// Crear el proveedor$provider = new Google([ 'clientId' => GOOGLE_CLIENT_ID, 'clientSecret' => GOOGLE_CLIENT_SECRET, 'redirectUri' => GOOGLE_REDIRECT_URI,]);?>


login.php



<?phprequire_once 'config.php';

// Generar la URL de autorización$authUrl = $provider->getAuthorizationUrl([ 'scope' => ['email', 'profile'], // solicitar correo electrónico y perfil]);

// Guardar el state para protección contra ataques CSRF$_SESSION['oauth2state'] = $provider->getState();

// Redirigir al usuarioheader('Location: ' . $authUrl);exit;?>

<!-- Alternativamente: botón en HTML --><a href="<?= htmlspecialchars($authUrl) ?>">Iniciar sesión con Google</a>


callbac

Recommendations