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-clientPara 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:
- El usuario hace clic en el botón «Iniciar sesión con el proveedor»
- Su aplicación redirige al usuario a la página de autorización del proveedor
- El usuario confirma el acceso
- El proveedor devuelve un código de autorización a su URI de callback
- Su aplicación intercambia el código por un token de acceso
- 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ónlogin.php— página de inicio de sesióncallback.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
También en la biblioteca
Métricas de Prometheus en Node.js: biblioteca prom-client para monitoreo
Eigen C++: guía completa con ejemplos prácticos
Geolocalización y mapas en C# (.NET): bibliotecas, ejemplos y recomendaciones
Compression en JavaScript (Node.js): guía completa con ejemplos
Generación de Swagger/OpenAPI para Node.js (JavaScript): herramientas y ejemplos