Adiós a las sesiones cortas: una propuesta para usar service workers para mejorar la administración de cookies en la Web

William Denniss
Owen Campbell-Moore

A todos nos gusta cómo las apps nativas te pedirán que accedas solo una vez y, luego, te recordarán hasta que les digas que quieres salir. Lamentablemente, la Web no siempre funciona de esa manera.

Ahora que los dispositivos, en especial los dispositivos móviles, son más personales y con más sitios que envían todo el tráfico a través de HTTPS y reducen el riesgo de robo de tokens, los sitios web deberían reconsiderar sus políticas de cookies de corta duración y adoptar sesiones de mayor duración que sean más fáciles de usar.

Sin embargo, incluso si quieres que la sesión dure más, algunos sitios web no verifican la autenticación del usuario en cada solicitud (en otras palabras, no hay manera de revocar la cookie de sesión una vez emitida). Por lo general, esto genera sesiones cortas, en las que el usuario se ve obligado a acceder con frecuencia para que su autenticación se pueda volver a validar, lo que permite, por ejemplo, un cambio de contraseña, que invalida las sesiones existentes en un período conocido.

Si usas este enfoque, tenemos una solución técnica que puede ayudarte a volver a validar automáticamente la cookie de autenticación sin estado. Funciona al tener un token secundario de larga duración que se puede usar para actualizar la cookie de autenticación de corta duración existente. El uso del nuevo patrón de service worker nos permite “registrar” regularmente con el token de larga duración, verificar la autenticación del usuario (por ejemplo, comprobar si no cambiaron sus contraseñas o revocaron la sesión recientemente) y volver a emitir una nueva cookie de autenticación de corta duración.

Una propuesta práctica para migrar a sesiones largas y seguras en la Web

A partir de aquí, en esta publicación, se describe una técnica nueva que proponemos llamar 2-Cookie-Handoff (2CH). Esperamos usar este artículo para escuchar los comentarios de la comunidad sobre si este enfoque parece positivo y, de ser así, trabajar con la industria para documentar las prácticas recomendadas para el uso de 2CH.

Los service workers son una tecnología nueva compatible con varios navegadores, como Chrome, Firefox y Opera, que pronto estará disponible en Edge. Te permiten interceptar todas las solicitudes de red de tu sitio a través de un punto común de código en el cliente, sin modificar las páginas existentes. Esto te permite configurar un "trabajador de 2CH" para los usuarios conectados que puede interceptar todas las solicitudes de red que realiza tu página y realizar el intercambio de token al igual que lo hacen las apps para dispositivos móviles.

La mayoría de las veces, tu servidor ya tiene un extremo que usan las apps para dispositivos móviles a fin de obtener un nuevo token de corta duración, generalmente con el protocolo OAuth. Para habilitar el patrón anterior en la Web, ese extremo solo debe actualizarse para comprender cuándo lo llama un service worker y, luego, mostrar una cookie de sesión de corta duración con un formato que otras páginas del sitio ya esperan.

Si tu servidor aún no tiene uno de estos extremos, puede crear uno solo para la administración de sesiones del navegador.

La secuencia de dos cookies para la entrega

El patrón de dos tokens con service workers sigue el patrón de OAuth 2.0 bastante de cerca. Si ya ejecutas un extremo de token de OAuth, probablemente puedas volver a usarlo con service workers para la autenticación web.

Es posible que también te preguntes qué sucede si el usuario visita un navegador que no admite service workers. Si implementas el enfoque anterior, el cliente simplemente no experimentará ninguna diferencia y seguirá experimentando sesiones cortas.

Publicamos un cliente y un backend de muestra. Esperamos que lo pruebes y respondas una encuesta sobre la administración de sesiones.