我正在使用C#开发Web api。
要登录,我使用Bear,我放入了用户数据,它返回一个令牌,该令牌放置在标题中以标识用户,效果很好。
问题
通常,令牌存储在厨师和本地商店中,不法者可以将令牌复制并带到其他设备上,他将可以访问该帐户。
我如何证明已登录的设备或浏览器正在使用此令牌?
答案 0 :(得分:0)
可以,但是效果不是很好。如果有人可以访问受害者的计算机,或者流量未经加密(HTTP),则可以劫持cookie。您可以采取一些措施作为对策。
如果您将令牌附加到会话中,则可以更改会话超时,尽管这也使连续使用服务变得更加困难。这就是网上银行使用的时间,通常是4-5分钟的时间。
为每个设备使用不同的令牌,如果令牌在其他地方使用则不允许身份验证。您可以将它们与会话结合使用,保持会话简短,如果看到两个具有不同会话ID的身份验证令牌,则表明该帐户存在漏洞,请注销这些设备。这就是大多数现代服务的工作方式,因为您可以无限期保持用户登录状态,也可以注销单个设备。
关于如何区分设备,除非您正在编写自己的台式机/移动应用程序,否则这是不可能的。您可以使用IP,但是可以更改,否则攻击者可能拥有相同的IP。桌面应用程序通常依赖连接的硬件设备,例如,这就是Windows许可证与您的计算机绑定的方式。但是这些可以被操纵甚至被模拟,在最坏的情况下,用户拔掉鼠标并注销。因此,据我所知,使用硬件ID困难得多,据我所知,Microsoft使用机器学习来确定您是要更换视频卡还是要将许可证迁移到祖母的计算机。
最好是使用不同的身份验证介质,例如发送SMS或电子邮件,但是最终您必须权衡可用性和安全性,这完全取决于类型您要提供的服务。如果您要进行购买,那么至少在购买时必须考虑两个因素。