JWT 旨在当客户端需要与后端通信时允许交换防篡改的令牌。它还可以通过在令牌中缓存会话数据来避免调用后端数据存储。
但我可以使用标准加密算法轻松加密会话数据并将其发送回客户端,客户端只需在每次调用时返回它。
那么使用 JWT 我真正获得了什么?如果有的话,将算法类型放入 JWT 中似乎是一个安全缺陷,因为它告诉黑客使用了哪种加密,从而减少了解密令牌所需的算法类型。通过以某种专有格式(不一定是 JSON)对会话数据进行编码,甚至使用自定义加密算法,这难道不是比使用 JWT 更好的解决方案吗?或者如果不使用 JWT,我会错过一些东西吗?
首先:
向黑客透露您的加密算法是不好的
不它不是。您永远不应该尝试使用非标准算法来增强安全性。这就是“默默无闻的安全”。正如 Kerckhoffs 原则所述,算法的安全性应该仅基于密钥的保密性,而不是基于算法。
关于实际问题:您应该使用 JWT(或任何其他标准化方法),而不仅仅是加密会话数据(这基本上只是构建您自己的令牌机制),因为它支持更多开箱即用的功能。使用 jwt 所需的时间可能比实现和测试您自己的解决方案要少得多。
此外,可能还有许多您可能不知道的安全相关方面(例如令牌重放攻击等)。因此,以任何当前已知的方式实现这样一个安全的系统是相当困难的。只要它们提供您需要的功能,最好使用经过测试且值得信赖的解决方案。