Tema 16

16. Gestión segura de tokens, expiración, refresh tokens y revocación

Los tokens permiten desacoplar autenticación y acceso, pero también concentran riesgo. Un token mal gobernado puede convertirse en una credencial reutilizable de alto valor, difícil de invalidar y fácil de abusar. La seguridad no depende solo de emitirlo correctamente, sino de controlar todo su ciclo de vida: generación, almacenamiento, uso, expiración, renovación y revocación.

Objetivo Gobernar el ciclo de vida completo de los tokens
Enfoque Emisión, uso, renovación, revocación y respuesta a incidentes
Resultado Reducir riesgo de robo, replay y acceso persistente no deseado

16.1 Introducción

En las APIs modernas, los tokens suelen ser la pieza que conecta identidad, autorización y continuidad operativa. Son cómodos porque evitan reenviar credenciales primarias y permiten modelar contexto de acceso. Pero también son peligrosos porque, si se comprometen, pueden dar acceso directo al backend sin necesidad de volver a autenticarse.

Por eso, el verdadero desafío no es solamente “usar tokens”, sino decidir cuánto viven, dónde se almacenan, cómo se renuevan, qué alcance tienen y cómo se invalidan cuando algo sale mal.

Una API madura trata los tokens como credenciales con ciclo de vida, no como cadenas que simplemente se emiten y se aceptan hasta que expiren.

16.2 Qué representa un token

Un token representa una decisión previa de confianza. Puede afirmar identidad, contexto de autenticación, scopes, audiencia, tenant, privilegios o combinación de todo eso. Cuando la API acepta un token, está aceptando esa decisión y actuando en consecuencia.

Esto significa que un token comprometido puede tener impacto equivalente a una sesión robada, un acceso delegado o un canal persistente hacia recursos protegidos.

El valor de un token no depende de su formato, sino de lo que habilita y de cuánto tiempo puede seguir habilitándolo.

16.3 Access tokens y refresh tokens

En muchos sistemas modernos aparecen al menos dos tipos de tokens:

  • Access token: se usa para acceder a la API y suele tener vida corta.
  • Refresh token: se usa para obtener nuevos access tokens sin repetir autenticación primaria.

Esta separación busca equilibrio entre seguridad y usabilidad. Los access tokens cortos reducen ventana de abuso; los refresh tokens sostienen continuidad. Pero si el refresh token no está bien protegido, puede anular ese beneficio.

16.4 Por qué la expiración importa

La expiración limita la ventana de aprovechamiento de una credencial robada. Un token sin expiración o con vida excesiva transforma cualquier filtración puntual en acceso prolongado.

Elegir la duración correcta exige balancear:

  • Riesgo del recurso protegido.
  • Capacidad de revocación del sistema.
  • Experiencia de usuario.
  • Frecuencia esperada de uso.
  • Entorno del cliente y nivel de confianza.

16.5 Tokens demasiado largos, tokens demasiado cortos

Ambos extremos generan problemas.

Diseño Ventaja aparente Riesgo real
Token muy largo Menos renovaciones y menos fricción Mayor ventana de abuso si se roba
Token muy corto Menor exposición temporal Mayor complejidad operativa y dependencia de renovación

La solución no es elegir un extremo, sino ajustar duración según criticidad, capacidad de renovación y sensibilidad del entorno.

16.6 Almacenamiento seguro del token

Un token bien emitido puede volverse inútil si el cliente lo almacena de forma insegura. Parte importante de la gestión segura consiste en decidir dónde vive el token mientras está en uso.

Los riesgos varían según el tipo de cliente:

  • En navegador, puede filtrarse por XSS, storage inseguro o scripts de terceros.
  • En mobile, puede quedar expuesto en almacenamiento local mal protegido.
  • En backend, puede terminar en variables, logs o archivos de configuración.

No existe un único patrón universal, pero sí una regla general: almacenar el token en el lugar menos expuesto compatible con el flujo real del cliente.

16.7 Transporte del token

El canal usual para transportar access tokens es la cabecera `Authorization`. Esto permite separarlos del cuerpo y evita parte de la exposición asociada a query strings o parámetros de URL.

Buenas prácticas generales:

  • No enviar tokens en query strings.
  • No exponerlos en referers o redirecciones.
  • No incluirlos en mensajes de error o respuestas de debugging.
  • Controlar que proxies y APMs no registren el valor completo.

16.8 Refresh tokens: por qué son especialmente sensibles

Un refresh token puede no servir para llamar directamente a la API, pero sí para mantener acceso a largo plazo. En muchos diseños, eso lo convierte en una credencial más valiosa que el access token.

Si un atacante obtiene un refresh token funcional, puede generar nuevos access tokens incluso después de que los existentes hayan expirado. Por eso suelen requerir protección reforzada, vida útil cuidadosamente diseñada y controles adicionales de rotación y revocación.

16.9 Rotación de refresh tokens

Una práctica útil consiste en rotar refresh tokens cada vez que se usan. Es decir, el servidor invalida el anterior y emite uno nuevo junto con el nuevo access token. Esto reduce el valor de una filtración silenciosa y ayuda a detectar reutilización sospechosa.

La rotación bien implementada permite detectar escenarios donde:

  • Un token viejo vuelve a usarse después de haber sido reemplazado.
  • Hay competencia entre cliente legítimo y atacante por la misma cadena de renovación.
  • Se intenta mantener acceso persistente tras compromiso.

16.10 Revocación: por qué no basta con esperar la expiración

Hay situaciones en las que esperar a que el token expire no es aceptable: robo de credenciales, logout, cambio de contraseña, sospecha de takeover, revocación de acceso delegado, baja de usuario o incidente operativo.

La revocación es la capacidad de invalidar un token antes de su expiración natural. Esto puede requerir estado adicional, listas de revocación, introspección o estrategias específicas según el tipo de token usado.

16.11 Revocación en tokens stateless

Los tokens autocontenidos, como muchos JWT, facilitan validación local y escalabilidad, pero hacen más compleja la revocación inmediata. Si el sistema no consulta un estado central, un token válido criptográficamente puede seguir siendo aceptado hasta expirar.

Opciones para manejar esto incluyen:

  • Access tokens de vida corta.
  • Revocación central de refresh tokens.
  • Listas de denegación o chequeos de versión de sesión.
  • Revalidación contextual en operaciones críticas.

16.12 Logout, cambio de contraseña y eventos de seguridad

La gestión segura de tokens debe integrarse con eventos operativos y de seguridad. Cuando el usuario cierra sesión, cambia contraseña o se detecta riesgo, el sistema debería saber qué credenciales asociadas deben invalidarse.

Preguntas clave:

  • ¿El logout invalida solo el access token actual o también refresh tokens?
  • ¿Qué pasa con otras sesiones activas del mismo usuario?
  • ¿Un cambio de contraseña fuerza reautenticación global?
  • ¿Se aíslan tokens por dispositivo o por cliente?

16.13 Audiencia, scopes y minimización del alcance

La gestión segura también implica emitir tokens con el menor alcance posible. No todos los clientes necesitan acceso a todos los recursos, y no todos los tokens deberían servir para múltiples APIs o contextos.

Controles importantes:

  • Emitir audiencias específicas.
  • Asignar scopes mínimos necesarios.
  • Separar tokens por cliente, servicio o tenant.
  • Evitar claims y privilegios excesivos por comodidad.

16.14 Reutilización y replay

Un token robado puede ser reutilizado desde otro contexto, dispositivo o ubicación si la API no dispone de mecanismos adicionales para detectar anomalías. Esto es especialmente delicado cuando los tokens se usan en clientes públicos o móviles.

Medidas complementarias pueden incluir:

  • Expiración corta.
  • Rotación de refresh tokens.
  • Señales contextuales de riesgo.
  • Revocación por sospecha o cambio de contexto anómalo.

16.15 Inventario y trazabilidad de tokens

Una API madura debería poder responder preguntas como:

  • ¿Qué tipo de tokens existen?
  • ¿Quién los emite?
  • ¿Para qué audiencia y con qué scopes?
  • ¿Cuándo expiran?
  • ¿Cómo se revocan?
  • ¿Desde qué clientes o dispositivos se usan?

Sin esa trazabilidad, responder a incidentes relacionados con credenciales se vuelve lento, parcial e incierto.

16.16 Observabilidad y uso anómalo

La gestión segura de tokens no termina en la emisión. También requiere monitorear cómo se usan. Algunas señales útiles:

  • Reutilización de refresh tokens ya rotados.
  • Acceso simultáneo desde ubicaciones incompatibles.
  • Patrones de renovación excesivos o irregulares.
  • Uso de tokens en APIs o audiencias no esperadas.
  • Elevación repentina de scopes o contexto de acceso.

16.17 Errores frecuentes

  • Emitir tokens con expiración excesiva.
  • No poder revocar credenciales antes de su vencimiento.
  • Guardar refresh tokens como si fueran datos inocuos.
  • Usar el mismo token para demasiados contextos o APIs.
  • No rotar credenciales sensibles tras eventos de riesgo.
  • Registrar tokens completos en logs o herramientas de soporte.
  • Asumir que un JWT firmado se gobierna solo.

16.18 Qué debes recordar de este tema

  • La seguridad de los tokens depende de todo su ciclo de vida, no solo de su emisión.
  • Access tokens y refresh tokens cumplen funciones distintas y tienen riesgos distintos.
  • La expiración limita ventana de abuso, pero no reemplaza revocación.
  • Refresh tokens requieren protección reforzada y, cuando sea posible, rotación.
  • Scopes, audiencia, almacenamiento y observabilidad son parte esencial del diseño seguro.

16.19 Conclusión

Los tokens son una herramienta poderosa para autenticar y autorizar en APIs modernas, pero solo son realmente seguros cuando se gestionan como credenciales vivas, con duración controlada, alcance mínimo, renovación bien diseñada y capacidad de revocación ante incidente. Sin esa gobernanza, el beneficio técnico del modelo se convierte rápidamente en una fuente persistente de riesgo.

En el próximo tema estudiaremos manejo de errores, mensajes seguros y prevención de fuga de información, para analizar cómo responder correctamente cuando algo falla sin regalar detalle útil a un atacante.