Qué resuelve JWT
JWT permite que una API valide un documento firmado sin consultar una sesión central en cada solicitud. Eso facilita ejecutar varias instancias, pero no elimina la necesidad de consultar usuarios, permisos o estados cuando la regla del negocio lo exige.
Flujo de autenticación
1. El cliente envía credenciales por HTTPS.
2. Spring Security autentica mediante PasswordEncoder y UserDetailsService.
3. La API emite un access token con expiración corta.
4. Un filtro valida firma, issuer, audience y expiración.
5. El contexto de seguridad recibe una identidad autenticada.
6. La autorización evalúa rol, propiedad y estado del recurso.Autenticación no es autorización
Que un token incluya ROLE_ADMIN no significa que cualquier operación administrativa sea válida. En INCACORE, además del rol, una operación puede depender del recurso y de la responsabilidad del usuario.
Las reglas críticas deben vivir en servicios o políticas de dominio, no solamente en requestMatchers.
Dónde guardar el token
No existe una opción universal:
La elección depende del tipo de cliente, arquitectura y amenazas, no de una regla aislada.
Expiración y revocación
Un access token debe expirar. Cuando el producto necesita sesiones largas, prefiero separar:
Esto introduce estado controlado, pero permite responder a incidentes. Stateless no debe convertirse en una excusa para no poder revocar acceso.
Claims mínimos
Incluyo solo información necesaria para identificar y autorizar. Evito datos sensibles, perfiles completos o información que cambia con frecuencia.
También valido issuer, audience, algoritmo esperado y timestamps. Aceptar cualquier algoritmo o confiar ciegamente en claims del cliente rompe el modelo de seguridad.
Conclusión
JWT es una pieza de transporte de identidad. Una implementación segura depende de HTTPS, expiración, validación estricta, protección del almacenamiento, reglas de autorización y una estrategia de revocación acorde al riesgo.
