前面的几篇文章讲了很多 JWT 的优点,但作为技术人员都知道,没有一种技术是万能的 “银弹”,所谓有矛就有盾,相比 Session、Cookie 等传统的身份验证方式,JWT 在拥有很多优点的同时,也有着不可忽视的缺点,比如:
一旦 JWT 被发放给客户端,在有效期内这个 Token 就一直有效,无法被提前撤回
JWT 中包含了一些额外的信息,可能会使得 JWT 体积较大,增加网络传输开销
JWT 中的信息是以明文形式存储的,容易被破解
总结:
这个方案在用户表中保存了 JWTVersion 值,因此它本质上仍然是在服务器端保存状态,这是绕不过去的,它算是一种缺点比较少的妥协方案,相类似的方案还有比如维护一个 Token 黑名单的办法,相对步骤比较多
精简 JWT 中的信息,只存储必要的信息。将一些非敏感且不经常变动的信息存储在服务端,而不是每次都包含在JWT中
设置较短的 JWT 过期时间,减少 JWT 的有效期,从减小 JWT 的体积
传输时对 JWT 进行压缩,减小 JWT 的大小,常见的压缩算法包括 GZIP 和 DEFLATE
在使用对称加密算法时,可以选择较小的密钥长度,减小 JWT 的大小
选择更高效的加密算法和签名算法,减小 JWT 的大小
定期清理过期的 JWT,避免过多无效 JWT 的存储占用带宽