Agrega autenticación JWT de Auth0 a una API de Spring Boot con endpoints protegidos
Esta guía de inicio rápido está actualmente en beta. ¡Nos encantaría conocer tus comentarios!
Usa IA para integrar Auth0
Si usas un asistente de programación con IA como Claude Code, Cursor o GitHub Copilot, puedes agregar autenticación de Auth0 automáticamente en minutos con agent skills.Instalación:
Add Auth0 JWT authentication to my Spring Boot API
Tu asistente de IA creará automáticamente tu API de Auth0, obtendrá las credenciales, agregará la dependencia del SDK de Auth0 para la API de Spring Boot, configurará application.yml e implementará una SecurityFilterChain con validación de JWT y endpoints protegidos. Documentación completa de agent skills →
Requisitos previos: Antes de comenzar, asegúrate de tener instalado lo siguiente:
Esta guía de inicio rápido muestra cómo agregar la autenticación JWT de Auth0 a una API de Spring Boot. Creará una API segura con endpoints protegidos mediante el SDK de API de Spring Boot de Auth0.
1
Crear un nuevo proyecto
Cree un nuevo proyecto de API con Spring Boot para esta guía de inicio rápido:Con Spring Initializr:
A continuación, debes crear una nueva API en tu tenant de Auth0 y agregar la configuración a tu proyecto.Puede hacerlo automáticamente ejecutando un comando de CLI o de forma manual a través del Dashboard:
CLI
Dashboard
Ejecuta el siguiente comando de shell en el directorio raíz de tu proyecto para crear una API de Auth0 y actualizar el archivo application.yml:
Identifier: https://my-springboot-api (esto se convierte en tu Audiencia)
Signing Algorithm: RS256
Selecciona Create
Reemplaza YOUR_AUTH0_DOMAIN en application.yml por tu dominio de la pestaña Test (por ejemplo, your-tenant.auth0.com)
Reemplaza YOUR_AUTH0_API_IDENTIFIER en application.yml por tu Identifier. Por ejemplo, https://my-springboot-api.
Tu dominio no debe incluir https://. Usa solo el dominio y la región. Por ejemplo: your-tenant.auth0.com.La Audiencia (API Identifier) es un identificador único para tu API y puede ser cualquier URI válida. No necesita ser una URL de acceso público.
4
Configurar la autenticación
Crea una clase de configuración de seguridad para habilitar la autenticación con JWT de Auth0. Crea src/main/java/com/example/auth0api/SecurityConfig.java:
Implemente un control de acceso detallado mediante los alcances de JWT para mejorar la seguridad.1. Defina alcances en su API de Auth0:En Auth0 Dashboard → APIs → Your API → Permissions, agregue alcances:
Habilite DPoP (Demonstration of Proof-of-Possession) para reforzar la seguridad de los tokens al vincular los tokens de acceso a claves criptográficas.Configure la compatibilidad con DPoP en application.yml:
Problema: La API devuelve un 401 incluso con tokens válidos.Solución: Asegúrate de que auth0.audience coincida exactamente con el identificador de tu API en Auth0. La reclamación audience del token debe coincidir con este valor.
Problema: La validación del emisor del token falla.Solución: Verifica que tu dominio sea correcto y que no incluya https://. Usa el dominio sin el prefijo https://.
Problema: La aplicación no se inicia debido a errores de configuración.Solución: Verifica la estructura de application.yml y los nombres de las propiedades. Asegúrate de que la sección auth0 contenga los valores de dominio y audiencia.
Problema: La autenticación no funciona a pesar de que la configuración es correcta.Solución: Asegúrate de que Auth0AuthenticationFilter esté correctamente integrado en la cadena de Spring Security. El filtro debe agregarse antes de UsernamePasswordAuthenticationFilter.
// ✅ ORDEN DE FILTRO CORRECTO.addFilterBefore(authFilter, UsernamePasswordAuthenticationFilter.class)
Problemas de conectividad de red
Problema: Fallos al recuperar JWKS o tiempos de espera de conexión.Solución: Es posible que el firewall corporativo esté bloqueando los endpoints de Auth0. Agrega los dominios de Auth0 a la lista permitida para el acceso por HTTPS:
# Reglas de firewall requeridas (HTTPS/443 saliente)*.auth0.com*.us.auth0.com # Para inquilinos de la región de EE. UU.*.eu.auth0.com # Para inquilinos de la región de la UE*.au.auth0.com # Para inquilinos de la región de AU
Los alcances no funcionan en las políticas de autorización
Problema: Las políticas de autorización basadas en alcances siempre fallan.Solución: Asegúrate de que tu token de acceso incluya los alcances necesarios. Al solicitar un token, especifica los alcances:
En el repositorio del SDK hay disponible una aplicación de ejemplo completa que muestra todas las funciones.
Aplicación de entorno de pruebas
Incluye endpoints públicos y protegidos, compatibilidad con DPoP y ejemplos
completos
Clone y ejecute:
git clone https://github.com/auth0/auth0-auth-java.gitcd auth0-auth-java/auth0-springboot-api-playground# Actualiza src/main/resources/application.yml con tu configuración de Auth0# Luego ejecuta:./mvnw spring-boot:run
Prueba con curl:
# Probar el endpoint públicocurl http://localhost:8080/api/public# Obtener token de acceso (reemplazar con tus credenciales de Auth0)curl -X POST https://YOUR_DOMAIN/oauth/token \ -H "Content-Type: application/json" \ -d '{ "client_id": "YOUR_CLIENT_ID", "client_secret": "YOUR_CLIENT_SECRET", "audience": "https://my-springboot-api", "grant_type": "client_credentials" }'# Probar el endpoint protegido con token Bearercurl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ http://localhost:8080/api/private