Usa IA para integrar Auth0
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 →Primeros pasos
net/http de Go.
Ver ejemplo en GitHub
Ejemplo completo y funcional con pruebas
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:
Ver el archivo go.mod esperado
Ver el archivo go.mod esperado
go.mod
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:
- 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 dominio, y luego crea tu archivo
.env:Este comando hará lo siguiente:
- Verificará si ya iniciaste sesión (y te lo pedirá si es necesario)
- Creará una API de Auth0 con el identificador especificado
- Mostrará los detalles de la API, incluidos el dominio y el identificador
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.- En la configuración de tu API, haz clic en la pestaña Permissions
- Crea el siguiente permiso:
| Permiso | Descripción |
|---|---|
read:messages | Leer mensajes de la API |
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.Crear el cargador de configuración
Cree un paquete de configuración para cargar y validar las variables de entorno.Qué hace esto:
internal/config/auth.go
- 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
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.Puntos clave:
- claims.go
- validator.go
internal/auth/claims.go
- El método
Validatese invoca automáticamente mediante el middleware después de procesar el JWT HasScopeanaliza 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
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.Niveles de protección:
- middleware.go
- api.go
internal/auth/middleware.go
- 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 permisoread:messages
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
Estructura del proyecto
Estructura del proyecto
Ejecuta y prueba tu API
Inicia el servidor de desarrollo:Deberías ver: 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
Server starting on :8080Prueba el endpoint público (no se requiere autenticación):read:messages):ComprobaciónAhora deberías tener una API de Go protegida. Tu API:
- Acepta solicitudes a endpoints públicos sin autenticación
- Rechaza solicitudes a endpoints protegidos sin un token válido
- Valida los JWT con tu dominio y audiencia de Auth0
- Aplica un control de acceso basado en permisos mediante alcances
Llamar a su API
Authorization como un token Bearer.
Ejemplos de código del cliente
Ejemplos de código del cliente
Obtener un token de acceso
Obtener un token de acceso
- Aplicaciones de una sola página o móviles
- Machine-to-Machine (M2M)
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
Seguridad de DPoP (Proof-of-Possession)
Seguridad de DPoP (Proof-of-Possession)
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.Modos de DPoP:
internal/auth/middleware.go
DPoPAllowed(predeterminado) — Acepta tokens Bearer y DPoPDPoPRequired— Acepta solo tokens DPoP y rechaza BearerDPoPDisabled— 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.
Configuración de CORS
Configuración de CORS
Habilita CORS para permitir solicitudes desde aplicaciones web. Puedes usar un middleware sencillo o una biblioteca como rs/cors:Para producción, especifica orígenes exactos en lugar de comodines.
cmd/server/main.go
Registro estructurado con slog
Registro estructurado con slog
Habilita el registro detallado para depurar la validación de tokens:Agrega una verificación al inicio:
internal/auth/middleware.go
cmd/server/main.go
Solución de problemas
Problemas comunes y soluciones
Problemas comunes y soluciones
”No se pudo validar el JWT” o 401 No autorizado
Problema: La API no puede encontrar o validar el token de acceso.Soluciones:- Asegúrate de que la cabecera
Authorizationesté presente:Authorization: Bearer YOUR_TOKEN - Comprueba que “Bearer” esté incluido antes del token
- Verifica que el token no haya expirado
- 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 queAUTH0_AUDIENCE coincida exactamente con el Identificador de API en el Auth0 Dashboard. La audiencia NO debe tener una barra diagonal al final:”método de firma inesperado”
Problema: El algoritmo del token no coincide con la configuración del validador.Soluciones:- Auth0 usa RS256 de forma predeterminada (asimétrico)
- Asegúrate de que tu validador especifique
validator.RS256 - Nunca uses
validator.HS256para 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:- Comprueba la conectividad de red con Auth0 (configuración de firewall/proxy)
- Prueba el endpoint de JWKS manualmente:
curl https://YOUR_AUTH0_DOMAIN/.well-known/jwks.json - 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
- Control de acceso basado en roles — Implemente permisos granulares
- Prácticas recomendadas para tokens de acceso — Conozca la seguridad de los tokens
- Supervise su API — Configure el registro y la supervisión
- Lista de comprobación para producción — Revisión de seguridad previa al lanzamiento
Recursos
- go-jwt-middleware GitHub — Código fuente, ejemplos y compatibilidad con DPoP
- Go API Sample — Ejemplo completo en funcionamiento
- Auth0 Community — Obtén ayuda de la comunidad