¿Cómo permitir que los usuarios se conecten desde múltiples dispositivos con tokens de actualización?

6

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 token R1
  • 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ón A2 / R2 gracias al token de actualización robado R1 : token de actualización creado recientemente coken = R2 (que solo el hacker tiene ) reemplaza al anterior R1 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ón A3 / R3 : token de actualización recién creado R3 (que solo el usuario tiene) reemplaza al anterior R2 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ón R2 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?

    
pregunta sp00m 09.08.2017 - 17:47
fuente

1 respuesta

3

En mi opinión, la pregunta que está haciendo ahora ya no tiene que ver con la seguridad, sino que se centra más en la implementación de un concepto. Ya has establecido que los tokens de actualización hacen que sea más difícil para los atacantes y parece que tienes una implementación operativa. Por lo que está describiendo, está utilizando una solución personalizada y no algo como una implementación de la biblioteca OAuth2 que le proporcionará esta funcionalidad.

Lo que ahora necesita decidir es si desea la autenticación de múltiples dispositivos desde la misma cuenta de usuario. Si no desea que los usuarios inicien sesión desde varios dispositivos en una cuenta, felicitaciones, su solución ya está funcionando. Se cerrará la sesión del dispositivo anterior pronto, ya que no contendrá el token de actualización correcto después de un tiempo de espera.

Si desea proporcionar a los usuarios la posibilidad de iniciar sesión desde más de un dispositivo en la misma cuenta, desafortunadamente necesita algunos cambios. Una posible solución es agregar un campo de identificación de dispositivo en su base de datos y emitir un token de actualización por dispositivo.

    
respondido por el Joe 18.08.2017 - 05:21
fuente

Lea otras preguntas en las etiquetas