Autenticación basada en tokens en API REST

Estoy tratando de implementar un enfoque de autenticación basado en token:

Cada inicio de sesión exitoso crea un nuevo token.

Si el usuario selecciona "mantenerme conectado" o el usuario está usando un dispositivo móvil, el token se conserva en una base de datos Redis sin una fecha de vencimiento. De lo contrario, el token caducará en 20 minutos.

Una vez que el usuario se autentica, el token se verifica desde cada solicitud posterior en mi base de datos Redis.

Me pregunto cómo puedo identificar dispositivos. En el caso de dispositivos móviles, puedo usar un identificador de dispositivo. Pero, ¿cómo puedo identificar un navegador?

Ejemplo: el usuario inicia sesión con Chrome y selecciona "mantenerme conectado". Se genera un token y persiste con el nombre del navegador en Redis. Si el usuario inicia sesión desde Firefox, guarda el token y "Firefox" en la base de datos. Guardo el token en Redis, mientras que el token se crea en una autenticación exitosa. ¿Está bien persistir solo el token y el navegador donde se está usando el token? ¿O necesito persistir también la IP?

Pregunta adicional: ¿Cómo evitar que los atacantes roben el token de una cookie?

Respuestas a la pregunta(2)

Su respuesta a la pregunta