JWT
Un token firmado, sus trampas criptográficas y su defecto irreductible.
Autenticación con JWT
JWT se presenta en todas partes como la solución moderna de autenticación, y esa reputación tiene una base real: un token firmado permite que cualquier servicio verifique una identidad sin consultar una base de datos ni compartir una sesión. Para una arquitectura distribuida en varios servicios, la ventaja es considerable.
Esa misma propiedad es también su defecto central, y el punto sobre el que casi todos los tutoriales guardan silencio: un JWT no se puede revocar. Es válido porque su firma es válida, y esa firma sigue siéndolo hasta la expiración inscrita en el token. Si un token se filtra, si despide a alguien, si un usuario cambia de contraseña tras haber sido comprometido, el token sigue funcionando. Una sesión de servidor, en cambio, se puede eliminar.
Existen atenuaciones —expiración corta, token de refresco, lista de bloqueo—, pero cada una reintroduce una parte del estado que el JWT pretendía suprimir. Elegir JWT es aceptar ese compromiso con conocimiento de causa, no evitar una reflexión.
Esta lección cubre, por tanto, el token en sí: su estructura, su firma, los dos ataques clásicos contra las implementaciones ingenuas, su integración en Spring Security y el tratamiento honesto de las cuestiones de almacenamiento en el cliente y de revocación. El código usa Spring Boot 3, Spring Security 6 y Java 17.
Comentarios
Los comentarios funcionan con GitHub Discussions
Inicia sesión con GitHub para participar en la discusión