唯一标识具有恒定唯一ID的浏览器

时间:2019-05-27 12:36:24

标签: javascript node.js authentication fingerprinting jwt-auth

TL; DR 如何区分两个相同的浏览器(例如,版本X的FF)是否唯一(可能具有恒定的唯一ID),即使这些浏览器在单独的设备上运行但具有相同的硬件(例如:2个相同配置的One Plus 6T)。


长版

场景

我已经在REST API中使用JWT实现了用户身份验证,并且一切正常。在我的应用程序中,只要用户登录到他/她的帐户,设备名称,JWT ID和刷新令牌就会相对于该用户保存在数据库中。如果登录来自网站,并且登录来自本地应用程序,则将访问令牌保存在cookie中,并将其存储在安全存储中。

当前,完成新的登录后,每次都会添加该设备的新记录。每当用户注销时,我都会从数据库中清除记录。因此,如果我查询数据库,则可以获得连接的设备列表。

问题

但是,如何处理以下情况:

  • 用户从浏览器中手动清除cookie或清除应用程序的应用程序数据/缓存,然后再次登录。
    然后,该记录仍将继续存在于DB中,以便进行先前的登录,并且在查询DB时,我会在列表中获得一个基本上与该设备相同的附加设备。

  • 用户从浏览器但以隐身模式登录

我的初始想法

每当用户第一次使用特定的浏览器登录时,获取/计算浏览器的唯一ID(该ID不会在更新中更改),并将该ID与设备名称和颁发给它的令牌一起保存。清除Cookie后,随后的登录请求也应生成相同的ID,我可以使用该ID更新相应浏览器的数据库中的令牌详细信息。

但是我如何为浏览器生成唯一ID,因为我们知道这是不可能的,并且浏览器指纹会随时间变化和更新。同样对于本地应用程序,例如:在Android CLIENT_ID中,恢复出厂设置也会发生变化。

所以,我的问题是,Google和一些主要的Web应用程序如何处理设备连接列表,有没有办法实现它?

任何想法或建议都会很有帮助。

0 个答案:

没有答案