Ir al contenido

Ciclo de vida del token en la práctica

Todas las guías de flujo OAuth mencionan refresh_token, pero una integración de larga duración (una que sigue funcionando a lo largo de muchas solicitudes, workers o días) necesita más que “sustituir el token cuando expire”. Esta página cubre las duraciones reales de los tokens, cómo almacenar en caché un token entre varios workers, cuándo renovarlo y qué puede invalidar un token antes de que expire por sí solo.


La duración del token de acceso es una única duración fija, igual para todos los flujos. La del token de actualización no lo es: depende de qué flujo OAuth lo emitió.

FlujoTTL del token de accesoTTL del token de actualización
Flujo de Client CredentialsAlrededor de 1 horaAlrededor de 30 días
Flujo de aplicación nativa (PKCE, redirección loopback)Alrededor de 1 horaSin expiración fija: permanece válido hasta que se sustituye por rotación o se revoca
Flujo de Authorization Code + redireccionamiento personalizadoAlrededor de 1 horaSin expiración fija: permanece válido hasta que se sustituye por rotación o se revoca

Almacena el token en caché, no generes uno por solicitud

Sección titulada «Almacena el token en caché, no generes uno por solicitud»

Solicitar un token de acceso nuevo en cada llamada a la API, o de forma independiente en cada proceso worker, funciona, pero desperdicia un viaje de ida y vuelta en cada solicitud para un token que ya es válido durante alrededor de una hora. Solicita un token, guárdalo en caché (en memoria para un solo proceso, o en un almacén compartido como Redis para una flota de workers) según la credencial que lo emitió, y entrega el token en caché a cada solicitud hasta que esté cerca de expirar.

Esto también importa para el token de actualización: cuantos menos procesos lo intercambien de forma independiente, menos probable es que te encuentres con la condición de carrera descrita más abajo.

Como la TTL del token de acceso es fija y se conoce de antemano, renueva de forma proactiva: registra cuándo obtuviste el token (o decodifica su claim exp) y solicita uno nuevo poco antes de ese momento, en lugar de esperar a que una solicitud falle primero.

Aun así, maneja una solicitud fallida como respaldo, pero distingue según el error recibido:

  • 401 con not_authenticated: la solicitud no llevaba ningún token portador utilizable. Es un error del lado del cliente (encabezado Authorization ausente o mal formado), no una señal para renovar.
  • 401 con invalid_token: falló la verificación de firma o de expiración del token. Renueva y reintenta una vez.
  • 403: nunca es un problema de token. El token es válido; quien llama no tiene el scope, el acceso al contenido o el rol que la operación requiere. Renovar no ayudará. Consulta Códigos de error: Límite de tasa, autenticación y control de acceso para el detalle completo de cada código.

Condiciones de carrera en renovaciones concurrentes

Sección titulada «Condiciones de carrera en renovaciones concurrentes»

Un token de actualización es de un solo uso: al intercambiarlo con grant_type=refresh_token se invalida ese token de actualización y se emiten juntos un nuevo token de acceso y un nuevo token de actualización. Si varios workers comparten un token de actualización en caché y dos de ellos intentan renovarlo casi al mismo tiempo, solo uno de los intercambios tiene éxito; el otro recibe un 401 genérico, no un error distinguible de “ya usado”.

Ninguno de los eventos siguientes revoca directamente un token de acceso vigente. Cada uno solo bloquea algo nuevo (una nueva solicitud de token, o la próxima renovación) mientras el token de acceso que ya tienes sigue funcionando hasta que se agota su propia TTL.

DesencadenanteEfecto
Se rota el secreto de cliente de la aplicación OAuthLas nuevas solicitudes de token o renovación con el secreto anterior se rechazan de inmediato. Un token de acceso ya emitido no se ve afectado y sigue funcionando hasta que expira de forma natural.
Se elimina la aplicación OAuth o su usuario de servicioBloquea la emisión de nuevos tokens para esa aplicación. Los tokens ya emitidos no se revocan de forma proactiva.
Se cambian los scopes de la aplicación OAuthUn token de acceso ya emitido conserva sus scopes originales durante el resto de su vigencia. El token solo adopta los nuevos scopes la próxima vez que se renueva o se reemite.
Se revoca explícitamente la concesiónBloquea de inmediato el próximo intento de renovación. El token de acceso aún válido no se fuerza a expirar y sigue funcionando hasta que expira de forma natural.