Tiempo de Vida de los Tokens
Antes de verificar la firma del token, el tiempo de vida del token debería ser calculado para asegurar que el token no ha expirado. Esto normalmente se hace leyendo el claim exp (expiration time) del token y calculando si este sigue siendo válido.
Un problema común es si el valor exp es demasiado grande o no está configurado en absoluto. El token sería válido para demasiado tiempo, o nunca expirar. Las cookies pueden ser expiradas del lado del cliente, sin embargo, los JWT no tienen la misma funcionalidad construida. Si queremos expirar un token antes del tiempo exp, debemos mantener una blacklist de estos tokens, rompiendo así el modelo centralizado. Es por esto que el foco debería estar en seleccionar el tiempo exp adecuado dada la funcionalidad de la aplicación. Otra opción son los refresher tokens.
Ejemplo Práctico 6
En este ejemplo, la implementación JWT no especificó un valor exp lo que implica que los tokens siempre sean válidos. Usa el siguiente token para obtener la flag:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InVzZXIiLCJhZG1pbiI6MX0.ko7EQiATQQzrQPwRO8ZTY37pQWGLPZWEvdWH0tVDNPU

El Error de Desarrollo
Como ya hemos mencionado, el JWT no tiene un valor exp por lo que siempre se mantiene vigente.
El Arreglo
Un valor exp debería ser añadido a los claims. Una vez añadido, la mayoría de las librerías incluirán revisar dicho valor en sus comprobaciones de validez. Esto puede ser hecho como se muestra aquí debajo:
lifetime = datetime.datetime.now() + datetime.timedelta(minutes=5) payload = { 'username' : username, 'admin' : 0, 'exp' : lifetime } access_token = jwt.encode(payload, self.secret, algorithm="HS256")
