Skip to main content
Por Evan Sims
Esta guía muestra cómo integrar Auth0 con una aplicación PHP mediante el SDK de Auth0 para PHP. Le recomendamos iniciar sesión para seguir esta guía de inicio rápido con ejemplos configurados para su cuenta.
¿Es la primera vez que usas Auth? Aprende cómo funciona Auth0, cómo se integra con las aplicaciones web tradicionales y qué protocolo usa.

Configura Auth0

Obtén las claves de tu aplicación

Cuando te registraste en Auth0, se creó una aplicación nueva para ti, o es posible que hayas creado una. Necesitarás algunos datos de esa aplicación para comunicarte con Auth0. Puedes obtenerlos en la sección Configuración de la aplicación del Auth0 Dashboard.
Panel de la aplicación
Necesitas la siguiente información:
  • Dominio
  • ID de cliente
  • Secreto del cliente
Si descargas el ejemplo de la parte superior de esta página, estos datos ya estarán completados.

Configurar las URL de callback

Una URL de callback es una URL de su aplicación a la que Auth0 redirige al usuario después de autenticarse. La URL de callback de su aplicación debe agregarse al campo Allowed Callback URLs en la configuración de la aplicación. Si este campo no está configurado, los usuarios no podrán iniciar sesión en la aplicación y recibirán un error.
Si está siguiendo el proyecto de ejemplo que descargó en la parte superior de esta página, la URL de callback que debe agregar al campo Allowed Callback URLs es http://127.0.0.1:3000/.

Configura las URL de cierre de sesión

Una URL de cierre de sesión es una URL de tu aplicación a la que Auth0 puede redirigir una vez que el usuario haya cerrado sesión en el servidor de autorización. Esto se especifica en el parámetro de consulta returnTo. La URL de cierre de sesión de tu aplicación debe agregarse al campo Allowed Logout URLs de la configuración de la aplicación. Si este campo no está configurado, los usuarios no podrán cerrar sesión en la aplicación y recibirán un error.
Si estás siguiendo el proyecto de ejemplo que descargaste al principio de esta página, la URL de cierre de sesión que debes agregar al campo Allowed Logout URLs es http://127.0.0.1:3000.

Integra tu aplicación PHP

Creemos una aplicación de ejemplo que autentique a un usuario en una aplicación PHP. Aquí seguiremos un enfoque sencillo, adecuado para este formato. Aun así, consulta la aplicación Quickstart en GitHub si quieres ver un ejemplo más completo.

Instalación del cliente HTTP y de las factorías de mensajería

El SDK de PHP de Auth0 es compatible con muchos estándares de PHP-FIG, lo que ofrece opciones de interoperabilidad con su arquitectura. Dos de especial importancia son PSR-17 y PSR-18. Estos estándares le permiten integrar los componentes de red que prefiera para gestionar la mensajería y las solicitudes. Deberá instalar bibliotecas compatibles en su proyecto para que el SDK pueda utilizarlas. La biblioteca de red más utilizada para PHP es Guzzle, aunque hay muchas opciones disponibles en la comunidad de PHP. Usemos Guzzle para esta aplicación de ejemplo. Una vez más, desde el directorio de su proyecto, ejecute el siguiente comando de shell:
composer require guzzlehttp/guzzle guzzlehttp/psr7 http-interop/http-factory-guzzle

Instalar el SDK de PHP

El SDK de PHP de Auth0 requiere Composer, una herramienta de gestión de dependencias para PHP. Composer le permite declarar las bibliotecas de las que depende su proyecto e instalarlas por usted. Asegúrese de que Composer esté instalado y accesible desde la consola antes de continuar. Ejecute el siguiente comando en la consola desde el directorio de su proyecto para instalar el SDK de PHP de Auth0:
composer require auth0/auth0-php
Esto creará una carpeta vendor dentro de tu proyecto y descargará todas las dependencias necesarias para usar el SDK de PHP de Auth0. También creará un archivo vendor/autoload.php, que se usa en el ejemplo para cargar todas las clases necesarias para que tu aplicación funcione. Es importante que incluyas este archivo de carga automática en tu proyecto para que el SDK funcione.

Configurar el SDK

Para empezar, crea un archivo .env en la raíz del directorio de tu proyecto para almacenar la configuración de la aplicación de ejemplo y completar las variables de entorno: Como PHP no puede leer por sí solo nuestro archivo .env, tendremos que instalar una biblioteca que nos ayude con eso. Aunque para nuestra aplicación de ejemplo usaremos una biblioteca concreta, en una aplicación real servirá cualquier cargador de dotenv que prefiera. Desde el directorio del proyecto, ejecuta el siguiente comando de shell para instalar la biblioteca:
composer require vlucas/phpdotenv
A continuación, vamos a crear el archivo fuente de PHP que usaremos para estos ejemplos de código, index.php, y a configurar una instancia del SDK de PHP de Auth0 para nuestra aplicación de ejemplo:
<?php

// Importar el Autoloader de Composer para hacer accesibles las clases del SDK:
require 'vendor/autoload.php';

// Cargar las variables de entorno desde el archivo .env:
(Dotenv\Dotenv::createImmutable(__DIR__))->load();

// Instanciar la clase Auth0 con nuestra configuración:
$auth0 = new \Auth0\SDK\Auth0([
    'domain' => $_ENV['AUTH0_DOMAIN'],
    'clientId' => $_ENV['AUTH0_CLIENT_ID'],
    'clientSecret' => $_ENV['AUTH0_CLIENT_SECRET'],
    'cookieSecret' => $_ENV['AUTH0_COOKIE_SECRET']
]);

Configuración de las rutas de la aplicación

Las aplicaciones modernas de PHP usan un patrón de enrutamiento para dirigir las solicitudes HTTP entrantes al código que las procesa, lo que determina qué debe ocurrir cuando nuestros usuarios visitan una determinada “página” de la aplicación. No existe una única forma correcta de implementar el enrutamiento en la aplicación, y hay muchas bibliotecas entre las que puede elegir para hacerlo. Para nuestra aplicación de ejemplo usaremos una biblioteca concreta, pero en una aplicación real puede elegir la que prefiera. Desde el directorio del proyecto, ejecutemos el siguiente comando de shell para instalar la biblioteca de enrutamiento:
composer require steampixel/simple-php-router
A continuación, volvamos a abrir nuestro index.php y demos vida a nuestra aplicación. Empiece por importar la biblioteca de enrutamiento y definir las URL completas de las rutas de nuestra aplicación de ejemplo como constantes con nombre para mayor comodidad, ya que necesitaremos hacer referencia a ellas en varios puntos de la aplicación:
// 👆 Continuamos desde los pasos anteriores. Agrega esto a tu archivo index.php.

// Importa nuestra biblioteca de enrutamiento:
use Steampixel\Route;

// Define las constantes de ruta:
define('ROUTE_URL_INDEX', rtrim($_ENV['AUTH0_BASE_URL'], '/'));
define('ROUTE_URL_LOGIN', ROUTE_URL_INDEX . '/login');
define('ROUTE_URL_CALLBACK', ROUTE_URL_INDEX . '/callback');
define('ROUTE_URL_LOGOUT', ROUTE_URL_INDEX . '/logout');
Ahora podemos pasar a añadir la lógica de enrutamiento de nuestra aplicación y las integraciones con el SDK:

Comprobar si hay una sesión

El SDK de PHP de Auth0 incluye un método práctico, getCredentials(), para comprobar si nuestro usuario se ha autenticado y ha devuelto su perfil. Vamos a usarlo en nuestra ruta de índice para mostrar el perfil del usuario si ha iniciado sesión o indicar que necesita iniciarla.
// 👆 Continuamos desde los pasos anteriores. Agrega esto a tu archivo index.php.

Route::add('/', function() use ($auth0) {
  $session = $auth0->getCredentials();

  if ($session === null) {
    // El usuario no ha iniciado sesión.
    echo '<p>Please <a href="/docs/login">log in</a>.</p>';
    return;
  }

  // El usuario ha iniciado sesión.
  echo '<pre>';
  print_r($session->user);
  echo '</pre>';

  echo '<p>You can now <a href="/docs/logout">log out</a>.</p>';
});
Podemos acceder a todas las propiedades del perfil de nuestro usuario desde la respuesta de la propiedad user, que es un array. Así, por ejemplo, podemos obtener el apodo del usuario con $session->user<a href="https://auth0.com/docs/users/user-profile-structure" target="_blank" rel="noreferrer">nickname, o su dirección de correo electrónico desde $session->useremail. La estructura es la de un perfil de usuario normalizado, sobre la que puedes obtener más información aquí. Es importante tener en cuenta que el contenido del perfil del usuario variará en función del proveedor o proveedores sociales que uses, por lo que nunca debes dar por hecho que un valor concreto siempre estará presente en la lógica de tu aplicación. Usa construcciones del lenguaje PHP, como isset o la coalescencia nula, para gestionar correctamente la presencia de un valor, o su ausencia; por ejemplo:
// ✋ No es necesario incluir esto en nuestra aplicación de ejemplo, es solo un ejemplo.
$name = $session->user['name'] ?? $session->user['nickname'] ?? $session->user['email'] ?? 'Unknown';

Inicio de sesión

Ahora creemos nuestra ruta /login, que usará el método login() del SDK de PHP de Auth0 para configurar la sesión del usuario y devolver una URL personalizada a la página de Universal Login de Auth0 para que el usuario inicie sesión.
// 👆 Continuamos desde los pasos anteriores. Agrega esto a tu archivo index.php.

Route::add('/login', function() use ($auth0) {
    // Es recomendable restablecer las sesiones de usuario cada vez que inicien sesión para evitar errores de "estado inválido", en caso de que encuentren problemas de red u otros inconvenientes que interrumpan un proceso de inicio de sesión previo:
    $auth0->clear();

    // Por último, configura la sesión local de la aplicación y redirige al usuario a la página de Universal Login de Auth0 para autenticarse.
    header("Location: " . $auth0->login(ROUTE_URL_CALLBACK));
    exit;
});

Gestión de la callback de autenticación

Después de que nuestros usuarios regresen tras autenticarse en la página de Universal Login de Auth0, volverán a nuestra aplicación de ejemplo en la ruta de callback, /callback, que gestionaremos en este paso. Cuando Auth0 nos devuelve a nuestros usuarios, incluye algunos parámetros esenciales en la cadena de consulta de la solicitud HTTP. El método exchange() del SDK de PHP de Auth0 se encarga de gestionarlos, por lo que completar nuestro flujo de autenticación es sencillo:
// 👆 Continuamos desde los pasos anteriores. Añade esto a tu archivo index.php.

Route::add('/callback', function() use ($auth0) {
    // Permite que el SDK complete el flujo de autenticación:
    $auth0->exchange(ROUTE_URL_CALLBACK);

    // Por último, redirige al usuario final de vuelta a la ruta / index para mostrar su perfil:
    header("Location: " . ROUTE_URL_INDEX);
    exit;
});

Cerrar sesión

Por último, veamos cómo gestionar correctamente el cierre de sesión de nuestros usuarios. El método logout() del SDK de Auth0 para PHP se encarga de borrar las cookies de sesión de nuestra aplicación de ejemplo, redirigir al usuario al endpoint /logout de Auth0 (que cierra la capa de sesión de Auth0 y cualquier capa de sesión del proveedor de identidad) y, después, devolverlo a la ruta de índice / de nuestra aplicación.
// 👆 Continuamos desde los pasos anteriores. Agrega esto a tu archivo index.php.

Route::add('/logout', function() use ($auth0) {
    // Borra la sesión local del usuario en nuestra app y redirigelo al endpoint de logout de Auth0 para cerrar su sesión de Auth0.
    header("Location: " . $auth0->logout(ROUTE_URL_INDEX));
    exit;
});

¡Ejecuta tu aplicación!

Por último, debemos indicarle a nuestro middleware de enrutamiento que efectivamente enrute las solicitudes:
// 👆 Continuamos desde los pasos anteriores. Añade esto a tu archivo index.php.

// Esto le indica a nuestro enrutador que hemos terminado de configurar las rutas y que estamos listos para comenzar a enrutar las solicitudes HTTP entrantes:
Route::run('/');
¡Eso es todo! Ya puedes ejecutar tu nueva aplicación; una vez más, desde el directorio de tu proyecto, ejecuta el siguiente comando en la shell:
php -S 127.0.0.1:3000 index.php
Abre en tu navegador http://127.0.0.1:3000 y pruébala.