Saltar al contenido principal

Usa IA para integrar Auth0

Si usas un asistente de programación con IA como Claude Code, Cursor o GitHub Copilot, puedes añadir autenticación para tu API con Auth0 automáticamente en minutos mediante agent skills.Instala:
Luego, pídele a tu asistente de IA:
Tu asistente de IA creará automáticamente tu API en Auth0, obtendrá las credenciales, instalará go-jwt-middleware, configurará el validador y protegerá los endpoints de tu API con validación de JWT. Documentación completa sobre agent skills →
Requisitos previos: Antes de empezar, asegúrate de tener instalado lo siguiente:
  • Go 1.24 o posterior (necesario para la compatibilidad con genéricos en go-jwt-middleware v3)
  • Git para el control de versiones
Verifica la instalación: go version

Primeros pasos

Crearás una API de Go con tres endpoints que demuestran distintos niveles de protección: acceso público, autenticación con JWT y permisos según el scope. La implementación completa usa go-jwt-middleware v3 con la biblioteca estándar net/http de Go.

Ver ejemplo en GitHub

Ejemplo completo y funcional con pruebas
1

Crea un nuevo proyecto

Cree un directorio nuevo para su API de Go e inicialice un módulo.
Instala las dependencias necesarias:
Cree la estructura del proyecto:
go.mod
2

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 hacerlo manualmente desde el 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 dominio, y luego crea tu archivo .env:
Este comando hará lo siguiente:
  1. Verificará si ya iniciaste sesión (y te lo pedirá si es necesario)
  2. Creará una API de Auth0 con el identificador especificado
  3. Mostrará los detalles de la API, incluidos el dominio y el identificador
Seguridad: Nunca incluyas archivos .env en el control de versiones. Agrega .env a tu archivo .gitignore.
3

Definir permisos de la API

Los permisos (alcances) te permiten definir cómo se puede acceder a los recursos. Por ejemplo, otorga acceso read a los gerentes y acceso write a los administradores.
  1. En la configuración de tu API, haz clic en la pestaña Permissions
  2. Crea el siguiente permiso:
Este tutorial usa el scope read:messages para proteger el endpoint restringido por alcance. Puedes definir permisos adicionales según las necesidades de tu aplicación.
4

Crear el cargador de configuración

Cree un paquete de configuración para cargar y validar las variables de entorno.
internal/config/auth.go
Qué hace esto:
  • Carga el dominio y la audiencia de Auth0 desde las variables de entorno
  • Valida al inicio que la configuración requerida esté presente
  • Devuelve una estructura de configuración segura en cuanto a tipos para usarla en toda la aplicación
5

Crear claims personalizadas y un validador de JWT

Los claims personalizados le permiten extraer y validar datos específicos de la aplicación de los JWT. El validador es el componente principal que verifica los tokens emitidos por Auth0.
internal/auth/claims.go
Puntos clave:
  • El método Validate se invoca automáticamente mediante el middleware después de procesar el JWT
  • HasScope analiza alcances separados por espacios para el control de acceso basado en permisos
  • El validador usa almacenamiento en caché de JWKS (TTL de 5 min) y permite una desviación de reloj de 30 s
  • El algoritmo RS256 se establece explícitamente para evitar ataques de confusión de algoritmos
6

Crear middleware y controladores HTTP

El middleware encapsula el validador para las solicitudes HTTP. Los controladores muestran tres niveles de protección: público, privado y con permisos según el scope.
internal/auth/middleware.go
Niveles de protección:
  • Público (/api/public) — No requiere autenticación
  • Privado (/api/private) — Requiere un JWT válido
  • Con scope (/api/private-scoped) — Requiere un JWT válido y el permiso read:messages
7

Crear el servidor principal

Integra todo en el punto de entrada principal con tiempos de espera aptos para producción y un cierre ordenado:
cmd/server/main.go
8

Ejecuta y prueba tu API

Inicia el servidor de desarrollo:
Deberías ver: Server starting on :8080Prueba el endpoint público (no se requiere autenticación):
Deberías ver:
Pruebe el endpoint privado sin un token (debería fallar):
Deberías ver un error 401 Unauthorized:
Para probar con un token válido, vaya a su API en el Auth0 Dashboard, haga clic en la pestaña Test y copie el token de acceso. Luego, ejecute:
Pruebe el endpoint con scope (requiere el permiso read:messages):
ComprobaciónAhora deberías tener una API de Go protegida. Tu API:
  1. Acepta solicitudes a endpoints públicos sin autenticación
  2. Rechaza solicitudes a endpoints protegidos sin un token válido
  3. Valida los JWT con tu dominio y audiencia de Auth0
  4. Aplica un control de acceso basado en permisos mediante alcances

Llamar a su API

Puede llamar a su API protegida desde cualquier aplicación enviando un token de acceso en el encabezado Authorization como un token Bearer.

Ejemplos de código del cliente

Si llama a la API desde una aplicación de una sola página o una aplicación móvil/nativa, una vez completado el flujo de autorización, obtendrá un token de acceso. La forma de obtener el token y de llamar a la API dependerá del tipo de aplicación que esté desarrollando y del framework que esté usando.

Aplicaciones de una sola página

Inicios rápidos de React, Vue y Angular con ejemplos

Aplicaciones móviles/nativas

Inicios rápidos de iOS, Android y React Native

Uso avanzado

DPoP (Demonstrating Proof-of-Possession) según la RFC 9449 ofrece mayor seguridad al evitar el robo de tokens mediante la vinculación criptográfica a una clave.
internal/auth/middleware.go
Modos de DPoP:
  • DPoPAllowed (predeterminado) — Acepta tokens Bearer y DPoP
  • DPoPRequired — Acepta solo tokens DPoP y rechaza Bearer
  • DPoPDisabled — Acepta solo tokens Bearer y rechaza DPoP
Se recomienda DPoP para API del sector financiero, API sanitarias y aplicaciones empresariales de alta seguridad. Más información en la documentación de DPoP.
Habilita CORS para permitir solicitudes desde aplicaciones web. Puedes usar un middleware sencillo o una biblioteca como rs/cors:
cmd/server/main.go
Para producción, especifica orígenes exactos en lugar de comodines.
Habilita el registro detallado para depurar la validación de tokens:
internal/auth/middleware.go
Agrega una verificación al inicio:
cmd/server/main.go

Solución de problemas

”No se pudo validar el JWT” o 401 No autorizado

Problema: La API no puede encontrar o validar el token de acceso.Soluciones:
  1. Asegúrate de que la cabecera Authorization esté presente: Authorization: Bearer YOUR_TOKEN
  2. Comprueba que “Bearer” esté incluido antes del token
  3. Verifica que el token no haya expirado
  4. Asegúrate de que estás usando un token de acceso, no un token de ID

”la claim aud no coincide”

Problema: La audiencia del token no coincide con tu API.Solución: Verifica que AUTH0_AUDIENCE coincida exactamente con el Identificador de API en el Auth0 Dashboard. La audiencia NO debe tener una barra diagonal al final:
La aplicación cliente también debe solicitar un token con el parámetro audience correcto.

”método de firma inesperado”

Problema: El algoritmo del token no coincide con la configuración del validador.Soluciones:
  1. Auth0 usa RS256 de forma predeterminada (asimétrico)
  2. Asegúrate de que tu validador especifique validator.RS256
  3. Nunca uses validator.HS256 para tokens de Auth0, salvo que se haya configurado específicamente

Endpoint JWKS inaccesible

Problema: El proveedor de caché de JWKS no puede acceder al endpoint de clave pública de Auth0.Soluciones:
  1. Comprueba la conectividad de red con Auth0 (configuración de firewall/proxy)
  2. Prueba el endpoint de JWKS manualmente: curl https://YOUR_AUTH0_DOMAIN/.well-known/jwks.json
  3. Verifica que la región de Auth0 sea correcta (us/eu/au)

Ruta de importación incorrecta

Problema: cannot find package "github.com/auth0/go-jwt-middleware/v3/..."Solución: Asegúrate de que todas las importaciones usen el sufijo /v3:

Errores de desfase del reloj / token expirado

Problema: El reloj del servidor está desincronizado, lo que hace que los tokens válidos parezcan expirados.Solución: El validador ya incluye una tolerancia de 30 s para el desfase del reloj. Si necesitas más, ajusta:

Error al extraer claims

Problema: Failed to retrieve claims al usar genéricos.Solución: Asegúrate de usar el parámetro de tipo correcto:

Próximos pasos

Ahora que tiene una API protegida, le recomendamos explorar:

Recursos