Cliente OAuth para PHP: guía completa de integración de autenticación
\n\nOAuth (Open Authorization) es un protocolo de autorización abierto que permite otorgar a un tercero acceso limitado a los recursos del usuario sin compartir nombre de usuario y contraseña. En el mundo de PHP existen varias librerías para implementar OAuth 2.0, pero una de las más populares y mantenidas es League\\OAuth2-Client (The PHP League). Esta librería proporciona una forma flexible y segura de integrar el inicio de sesión a través de Google, Facebook, GitHub, VK (VKontakte), Yandex y muchos otros servicios.
\n\nEn este artículo, analizaremos en detalle la instalación, configuración y uso del cliente OAuth para PHP con el ejemplo de autenticación a través de Google y VK. Aprenderá cómo obtener el access token, refresh token y los datos del perfil del usuario.
\n\nInstalación del cliente OAuth mediante Composer
\n\nPara comenzar, es necesario instalar la librería principal y los proveedores (adaptadores para servicios específicos). Ejecute en la terminal:
\n\ncomposer require league/oauth2-client\ncomposer require league/oauth2-google\ncomposer require league/oauth2-vk\n\nLa librería es compatible con PSR-7 (mensajes HTTP) y PSR-18 (cliente HTTP), por lo que también se recomienda instalar Guzzle o cualquier otro cliente HTTP compatible:
\n\ncomposer require guzzlehttp/guzzle\n\nArquitectura básica de OAuth 2.0
\n\nOAuth 2.0 en PHP funciona según el siguiente esquema:
\n- \n
- Client ID y Client Secret — se obtienen al registrar la aplicación en el servicio (Google Cloud Console, VK Developers, etc.). \n
- Redirect URI — la URL en su sitio web a la que el servicio redirigirá al usuario después de la autorización. \n
- Authorization Code — un código temporal que se intercambia por un access token. \n
- Access Token — la clave para acceder a la API del usuario. \n
- Refresh Token — permite renovar el access token sin necesidad de una nueva autorización. \n
Ejemplo: inicio de sesión con Google
\n\nCrearemos un manejador simple para la autenticación a través de Google. Se asume que ya tiene client_id y client_secret.
Paso 1. Redirigir al usuario a la página de autorización de Google
\n\n<?php\nrequire 'vendor/autoload.php';\n\n$provider = new \\League\\OAuth2\\Client\\Provider\\Google([\n 'clientId' => 'SU_CLIENT_ID',\n 'clientSecret' => 'SU_CLIENT_SECRET',\n 'redirectUri' => 'https://su-sitio.com/callback.php',\n]);\n\n// Generamos la URL para la autorización\n$authUrl = $provider->getAuthorizationUrl([\n 'scope' => ['email', 'profile'], // permisos solicitados\n]);\n\n// Guardamos el state en la sesión para protección contra CSRF\n$_SESSION['oauth2state'] = $provider->getState();\n\nheader('Location: ' . $authUrl);\nexit;\n\nPaso 2. Procesar el callback (callback.php)
\n\n<?php\nsession_start();\nrequire 'vendor/autoload.php';\n\n$provider = new \\League\\OAuth2\\Client\\Provider\\Google([\n 'clientId' => 'SU_CLIENT_ID',\n 'clientSecret' => 'SU_CLIENT_SECRET',\n 'redirectUri' => 'https://su-sitio.com/callback.php',\n]);\n\n// Verificamos el state para prevenir ataques CSRF\nif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {\n unset($_SESSION['oauth2state']);\n exit('Estado inválido');\n}\n\ntry {\n // Intercambiamos el authorization code por un access token\n $accessToken = $provider->getAccessToken('authorization_code', [\n 'code' => $_GET['code']\n ]);\n\n // Obtenemos los datos del perfil del usuario\n $resourceOwner = $provider->getResourceOwner($accessToken);\n $user = $resourceOwner->toArray();\n\n echo "¡Hola, " . htmlspecialchars($user['name']) . "!";\n echo "Email: " . htmlspecialchars($user['email']);\n // Guardamos el token en la base de datos para También en la biblioteca
Criptografía en C++: cifrado y hashes con OpenSSL y Crypto++
Internacionalización (i18n) en Java: guía completa con ejemplos
Envío de correo electrónico en Go (Golang): bibliotecas y ejemplos de código
Monitoreo de aplicaciones C++: biblioteca metrics para recopilación de métricas