Autenticação baseada em token nas APIs REST

Estou tentando implementar uma abordagem de autenticação baseada em token:

Todo login bem-sucedido cria um novo token.

Se o usuário selecionar "mantenha-me conectado" ou o usuário estiver usando um dispositivo móvel, o token será mantido em um banco de dados Redis sem data de validade. Caso contrário, o token expirará em 20 minutos.

Depois que o usuário é autenticado, o token é verificado em cada solicitação subsequente no meu banco de dados Redis.

Eu estou querendo saber como posso identificar dispositivos. No caso de dispositivos móveis, posso usar um identificador de dispositivo. Mas como posso identificar um navegador?

Exemplo: o usuário faz login usando o Chrome e seleciona "manter-me conectado". Um token é gerado e persistido com o nome do navegador no Redis. Se o usuário efetuar login no Firefox, salve o token e o "Firefox" no banco de dados. Eu salvo o token no Redis, enquanto o token é criado na autenticação bem-sucedida. É bom persistir apenas o token e o navegador em que o token está sendo usado? Ou preciso manter o IP também?

Pergunta adicional: Como evitar que invasores roubem o token de um cookie?

questionAnswers(2)

yourAnswerToTheQuestion