C# 如何确保令牌来自登录的设备或浏览器

C# 如何确保令牌来自登录的设备或浏览器,c#,security,asp.net-web-api,access-token,C#,Security,Asp.net Web Api,Access Token,我正在用C#开发一个web api 在使用bear登录时,我输入用户数据,它返回一个令牌,这个令牌我放在头中以识别用户,它工作得非常好 问题 通常,代币存储在cooks和本地商店中,不法分子可以复制代币并将其带到另一台设备,他将有权访问该帐户 如何证明登录的设备或浏览器正在使用此令牌?您可以,但它们不是非常有效。如果有人可以访问受害者的计算机,或者如果流量未加密(HTTP),则可以劫持cookie。有几个步骤可以作为对策 如果要将令牌附加到会话,则可以更改会话超时时间,尽管这也会使持续使用服务变

我正在用C#开发一个web api

在使用bear登录时,我输入用户数据,它返回一个令牌,这个令牌我放在头中以识别用户,它工作得非常好

问题

通常,代币存储在cooks和本地商店中,不法分子可以复制代币并将其带到另一台设备,他将有权访问该帐户


如何证明登录的设备或浏览器正在使用此令牌?

您可以,但它们不是非常有效。如果有人可以访问受害者的计算机,或者如果流量未加密(HTTP),则可以劫持cookie。有几个步骤可以作为对策

如果要将令牌附加到会话,则可以更改会话超时时间,尽管这也会使持续使用服务变得更加困难。这是网上银行使用的,通常是4-5分钟的窗口

为每个设备使用不同的令牌,如果令牌在其他地方使用,则不允许身份验证。您可以将它们与会话结合使用,保持会话简短,如果您看到两个具有不同会话ID的身份验证令牌,那么您知道该帐户存在漏洞,请注销这些设备。这就是大多数现代服务的工作方式,因为您可以让用户无限期地登录,也可以注销单个设备

至于如何区分设备,除非您正在编写自己的桌面/移动应用程序,否则是不可能的。您可以使用IP,但这可能会改变,或者攻击者可能拥有相同的IP。桌面应用程序通常依赖于连接的硬件设备,例如Windows许可证就是这样绑定到您的计算机的。但这些都可以被操纵,甚至可以被模拟,最坏的情况是用户拔下鼠标并注销。因此,使用硬件ID要困难得多,据我所知,Microsoft使用机器学习来确定您是在更换视频卡还是将许可证迁移到您奶奶的计算机上


最好是使用不同的身份验证媒介,如发送短信或电子邮件,但最终你必须在可用性和安全性之间进行权衡,而这一切都取决于你想要提供的服务类型。如果你在处理购买事宜,那么至少在进行购买时,必须考虑两个因素。

阅读这篇文章可以帮助你:阅读这篇文章可以帮助你: