如果有人知道这个秘密,JWT会安全吗?如果没有,你怎么能让JWT安全?

时间:2018-01-13 17:04:23

标签: security jwt token

我最近阅读了很多文章,讨论如何使用JWT进行身份验证,以通过不保存任何与会话相关的数据来提高性能。根据我的理解,它会为数据(通常是user_id)签名,生成JWT令牌。然后每个客户端请求发送令牌。服务器只检查是否可以验证签名并信任存储在JWT的有效负载中的内容。

我担心的是,如果有人知道你的秘密,他可以自己轻松创建一个JWT令牌并伪装成系统中的任何用户。一个简单的例子是任何能够看到源代码的人都可以轻松地做到这一点。 (例如:内部成员)

你如何防止它发生?我能想到的一件事是在每次服务器重启时使用随机生成的秘密。 (如果你断断续续运行很长时间而不改变秘密,这可能仍然不安全)

1 个答案:

答案 0 :(得分:2)

由于这个原因,许多人似乎在JWT的安全方面存在问题,而且在不失去使用JWT的好处的情况下无法列入白名单/黑名单。关于在每次重启服务器时生成新密码,请记住,每次更改密钥时,您基本上都要注销'当前登录的每个用户,或者您正在使用它的任何其他目的。我认为通常的做法是确保秘密仍然只是秘密。据我所知,一个长的随机生成的字符串保存在一个极少数人可以访问的文件中,这是阻止当前机密泄露的最佳方法。

要记住的另一件事是,JWT中的任何人都不会隐藏数据。任何人都可以看到您存储的内容,因此不要在其中存储任何敏感数据。你可能已经从阅读中知道了这一点,但是在JWT的身体中意外地留下敏感数据是一个非常容易和致命的错误。