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应用程序如何处理设备连接列表,有没有办法实现它?
任何想法或建议都会很有帮助。