我正在了解JWT项目的安全性,但我有一个问题。如果我在登录后正确收到令牌,但是其他地方的其他人(黑客)窃取了这个特定令牌,他可以访问我的会话吗?使用JWT身份验证的服务器能够检测到这一点并保护我吗?怎么样?
答案 0 :(得分:40)
只有服务器应该知道用于生成JWT的“秘密”。如果有人修改了JWT中包含的数据,服务器将无法对其进行解码。因此服务器可以信任它可以解码的任何JWT。
但是,如果黑客可以访问您的计算机,他们可以看到存储在浏览器中的JWT并使用它。同样的威胁存在w / cookies,所以它并不是JWT的缺陷。
缓解此威胁的一种方法是JWT的到期日期。对于银行应用程序,您的JWT可能会在几分钟后过期。对于Facebook,它可能会在几个月后过期。但是,如果有人访问您的浏览器,则没有防弹解决方案。
黑客的另一种方法是“中间人”攻击,以拦截客户端和服务器之间的网络流量,并获取cookie / JWT。应始终通过HTTPS 发送 Cookie / JWT以防止此情况。
重要编辑
最后,回答你标题中的问题,“JWT的安全性如何?”:这取决于你如何存储令牌。本地存储不如使用Cookie(reference)安全,但Cookie可能会受到CSRF or XSRF攻击。
这个答案过去常说JWT比cookie更安全,因为cookie受到CSRF攻击。但是将JWT存储在本地存储中也不安全。因此,我不再将JWT存储在本地存储中,而是使用众所周知的技术来缓解CSRF攻击。