Esta pregunta sigue a mi pregunta anterior: ¿Cómo mantener a mis usuarios conectados con tokens de actualización?
Lo que obtuve de esta pregunta anterior es que necesitamos:
- tokens de acceso de corta duración
- tokens de actualización de una sola vez de larga duración
Los tokens de actualización se conservan en la base de datos junto con los usuarios en una relación 1-1 (1 usuario = 1 token de actualización). Cada vez que se crea un token de actualización para un usuario, reemplaza al persistente del usuario anterior (si existe). Esto permite que los posibles hackers tengan solo una ventana limitada para hacer sus cosas:
- el usuario inicia sesión y recibe el token de acceso
A1
y actualiza el tokenR1
- el pirata informático logra obtener esos tokens de alguna manera
- el token de acceso
A1
alcanza el vencimiento, por lo que el pirata informático obtiene un nuevo acceso / tokens de actualizaciónA2
/R2
gracias al token de actualización robadoR1
: token de actualización creado recientemente coken =R2
(que solo el hacker tiene ) reemplaza al anteriorR1
en DB (el que tiene el usuario) - el usuario falla al obtener un nuevo token de acceso porque su token de actualización
R1
ya no existe, por lo tanto, vuelva a iniciar sesión y obtenga un nuevo token de acceso / actualizaciónA3
/R3
: token de actualización recién creadoR3
(que solo el usuario tiene) reemplaza al anteriorR2
en DB (el que tiene el pirata informático) - el token de acceso del hacker
A2
expira, pero no puede obtener uno nuevo porque el token de actualizaciónR2
ya no existe: necesita robar los tokens nuevamente (se supone que es difícil de hacer, por supuesto)
Lo que me pregunto aquí es cómo permitir que un usuario se conecte desde múltiples dispositivos con este mecanismo. Por ejemplo, si un usuario inicia sesión con dos computadoras portátiles diferentes, los tokens de actualización siempre se borrarán entre sí ... ¿Alguna pista?