Usa IA para integrar Auth0
Usa IA para integrar Auth0
Si usas un asistente de codificación con IA como Claude Code, Cursor o GitHub Copilot, puedes añadir autenticación de Auth0 a tu API automáticamente en minutos con agent skills.Instala:Luego pídele a tu asistente de IA:Tu asistente de IA creará automáticamente tu API de Auth0, recuperará las credenciales, instalará
express-oauth2-jwt-bearer, configurará el middleware JWT y protegerá los endpoints de tu API mediante la validación de tokens. Documentación completa sobre agent skills →Requisitos previos: Antes de comenzar, asegúrate de tener instalado lo siguiente:
- Node.js 18 LTS o posterior (compatible con
^18.12.0 || ^20.2.0 || ^22.1.0 || ^24.0.0) - npm 8+ o yarn 1.22+ o pnpm 8+
node --version && npm --versionCompatibilidad de versiones de Express: Esta guía de inicio rápido funciona con Express 4.x y Express 5.x.Primeros pasos
Crear un proyecto nuevo
Cree un directorio nuevo para su API de Express e inicialice un proyecto de Node.js.Inicializa el proyectoCree la estructura del proyecto
Instala el SDK de express-oauth2-jwt-bearer
Instala las dependencias requeridasAñade scripts de inicio a tu
package.json:package.json
Configura tu API de Auth0
A continuación, debes crear una nueva API en tu inquilino de Auth0 y agregar las variables de entorno a tu proyecto.Tienes dos opciones para configurar tu API de Auth0: usar un comando de la CLI o configurarla manualmente desde el Dashboard:
- CLI
- Dashboard
Ejecuta el siguiente comando en el directorio raíz de tu proyecto para crear una API de Auth0:Después de crearla, copia los valores de Identifier y Domain, y luego crea tu archivo
Este comando hará lo siguiente:
- Comprobar si has iniciado sesión (y pedirte que inicies sesión si es necesario)
- Crear una API de Auth0 con el identificador especificado
- Mostrar los detalles de la API, incluidos el dominio y el identificador
.env:.env
Reemplaza
YOUR_AUTH0_DOMAIN por el dominio de tu inquilino de Auth0 (por ejemplo, dev-abc123.us.auth0.com) y YOUR_API_IDENTIFIER por el identificador de tu API (por ejemplo, https://my-express-api.example.com).Configure el middleware JWT
Cree su servidor Express y configure la validación de JWT:Qué hace esto:
server.js
- Crea un middleware de validación de JWT con tu dominio de Auth0 y la audiencia de la API
- Valida las claims
issyaudde los tokens de acceso entrantes - Hace que
checkJwtesté disponible para proteger rutas individuales
Crear rutas de la API
Añade rutas públicas y protegidas a tu Puntos clave:
server.js:server.js
- Las rutas públicas no requieren autenticación
- Las rutas protegidas usan el middleware
checkJwtpara exigir un JWT válido - Las rutas con alcances usan
requiredScopes()para exigir permisos específicos en el token req.auth.payloadcontiene las claims del JWT decodificado para las solicitudes autenticadas- La claim
subcontiene el identificador único del usuario
Ejecute la API
Inicia el servidor de desarrollo:Tu API ya se está ejecutando en http://localhost:3001.
La opción
--watch en Node.js 18+ reinicia automáticamente el servidor cuando cambian los archivos.Pruebe la API
Pruebe el endpoint público (no requiere autenticación):Deberías ver:Pruebe el endpoint protegido sin token (debería fallar):Debería ver un error 401 Unauthorized:Para hacer una prueba con un token válido:Deberías ver:
- Ve a Auth0 Dashboard → Applications → APIs
- Selecciona tu API → pestaña Test
- Copia el token de acceso generado
Punto de verificaciónAhora debería tener una API protegida. Su API:
- Acepta solicitudes a endpoints públicos sin autenticación
- Rechaza solicitudes a endpoints protegidos sin un token válido
- Valida los tokens JWT con respecto a su dominio y audiencia de Auth0
- Proporciona información del usuario a partir de los claims del token mediante
req.auth.payload
Uso avanzado
Autorización basada en alcances
Autorización basada en alcances
Los alcances permiten un control de acceso granular. Puede exigir alcances específicos para distintos endpoints.Configure los alcances en Auth0:
- En el Auth0 Dashboard, vaya a Applications → APIs → Your API
- Vaya a la pestaña Permissions
- Agregue permisos como
read:messages,write:messages,admin:access
server.js
Si una solicitud no incluye el alcance requerido, la API devuelve
403 Forbidden con un error insufficient_scope. Asegúrese de que la aplicación cliente solicite los alcances correctos al obtener un token de acceso.Validación de claims personalizados
Validación de claims personalizados
Además de los alcances, puede validar claims personalizados en la carga útil del JWT:
server.js
Los claims personalizados deben usar URL con espacio de nombres (por ejemplo,
https://myapp.com/roles) a menos que sean claims estándar de OIDC. Más información sobre los claims personalizados.Autenticación opcional (rutas públicas/privadas mixtas)
Autenticación opcional (rutas públicas/privadas mixtas)
Permita acceso autenticado y anónimo a la misma ruta:
server.js
Configuración de CORS
Configuración de CORS
Habilite CORS para permitir solicitudes desde aplicaciones web:Para producción, especifique los orígenes exactos:
server.js
server.js
Gestión personalizada de errores
Gestión personalizada de errores
Añada un manejo exhaustivo de los errores de autenticación:
server.js
Compatibilidad con TypeScript
Compatibilidad con TypeScript
Para proyectos de TypeScript, instale las definiciones de tipos y configure el proyecto:Cree Añada un Ejecútelo con:
server.ts:server.ts
tsconfig.json:tsconfig.json
npx ts-node server.tsResolución de problemas
Problemas comunes y soluciones
Problemas comunes y soluciones
”No authorization token was found”
Problema: La API no encuentra el token de acceso en la solicitud.Soluciones:- Asegúrate de que el encabezado
Authorizationesté presente:Authorization: Bearer YOUR_TOKEN - Comprueba que “Bearer” esté incluido antes del token
- Verifica que el token no haya expirado
”Invalid token” o “jwt malformed”
Problema: El formato del token no es válido.Soluciones:- Asegúrate de que estás usando un token de acceso, no un token de ID
- El token debe obtenerse con el parámetro
audiencede tu API - Comprueba que el token sea un JWT válido (debe tener tres partes separadas por puntos)
Valor inesperado de “iss” o “aud”
Problema: El emisor o la audiencia del token no coinciden con tu configuración.Soluciones:- Decodifica tu token en jwt.io
- Comprueba que el claim
isscoincida conhttps://YOUR_AUTH0_DOMAIN/(ten en cuenta la barra diagonal final) - Comprueba que el claim
audcoincida exactamente con tuAUTH0_AUDIENCE - Verifica los valores de tu
.env:
“You must provide an issuerBaseURL” o “audience is required”
Problema: Las variables de entorno no se están cargando.Soluciones:- Asegúrate de que el archivo
.envexista en la raíz de tu proyecto - Verifica que
dotenvesté instalado:npm install dotenv - Agrega
require('dotenv').config()al principio de tu archivo del servidor - Comprueba que los nombres de las variables coincidan exactamente (distinguen entre mayúsculas y minúsculas)
401 Unauthorized en todas las solicitudes
Posibles causas:- El token ha expirado
- La audiencia no coincide
- El emisor no coincide
- Decodifica tu token en jwt.io
- Comprueba que el claim
expno haya vencido - Verifica que el claim
audcoincida exactamente con tuAUTH0_AUDIENCE - Verifica que el claim
issseahttps://{AUTH0_DOMAIN}/ - Asegúrate de que el formato del encabezado
AuthorizationseaBearer YOUR_TOKEN(con espacio)
403 Forbidden con “insufficient_scope”
Problema: El token no tiene los alcances requeridos.Soluciones:- Verifica que los alcances estén definidos en tu API de Auth0 (Dashboard → Applications → APIs → Permissions)
- Solicita los alcances al obtener el token
- Comprueba que el claim
scopedel token incluya los alcances requeridos
Errores de CORS en el navegador
Problema: El navegador bloquea las solicitudes a la API debido a la política de CORS.Solución: Instala y configuracors:Próximos pasos
- Control de acceso basado en roles - Implemente permisos granulares
- Prácticas recomendadas para la autorización de API - Conozca las prácticas recomendadas para los tokens de acceso
- Supervise su API - Configure el registro y la supervisión
- Comunidad de Auth0 - Obtenga ayuda de la comunidad
Recursos
- express-oauth2-jwt-bearer GitHub - Código fuente y ejemplos
- Express.js Documentation - Más información sobre Express
- Auth0 API Authentication - Comprenda los tokens de acceso
- JWT.io - Depure y decodifique JWT