«

停止使用 JWT !

时间:2026-6-27 00:38     作者:独元殇     分类: 开发相关


欢迎关注我的公众号,名叫「串串狗小刊」

最近在研究更舒服的用户认证方式,然后感觉 JWT 不行。

停止使用 JWT !

我个人一贯认为这个 JWT 相当的不合理,它是一个「无状态」的技术,没办法直接退出登录、改密码。只能限制一个 access token 有效期,比如 15 分钟。

而且服务端千人千面,很混乱。

轮成熟,比不上 session/cookie ,轮安全, JWT 得搭配各种防伪、限制技术。我感觉它就是一个玩具,安全性非常不可靠。

它是为了什么设计的?是那种需要时间非常短,临时的,比如 5 分钟会话的令牌的场景,根本不建议用在任何对安全严格的地方。

最好的方式,还得是 Cookie 会话机制(一定要开启 httpOnly)!对于 Node 来说,最好的工具是 Express 中的 express-session 模块。

大家可以看一下这个吐槽视频 : https://www.youtube.com/watch?v=pYeekwv3vC4

(当然,也不要使用 localStorage 或 sessionStorage 来存储认证信息,以及任何的敏感信息,包括个人的信息和隐私。敏感信息就使用专业的 cookie 就行了!)

(敏感信息存到 httpOnly 的 cookie 里,最好再开启 SameSite=strict ,以及 secure=true ,这是目前我能想到的最安全的方式了!没有之一!)

当然,谷歌也用 JWT ,但是 谷歌的 JWT 是他们自研的一种,并不是我们通常使用的那种。

传统的 JWT ,如果用在生产环境,非常的麻烦,必须自己亲力亲为,自己生成令牌、刷新令牌、验证令牌。客户端,我们还得操心每次请求都要带上令牌,以及设计好什么时候刷新、什么时候发送....

建议使用 PASETO

除了 Cookie 外,我们其实还可以使用一种 更安全的 JWT 。

叫做 PASETO !

主要解决的问题,就是默认 JWT 的那种千人千面,而是一种更规范的。里面有 public 和 local 两种模式,后者会加密。

PASETO 是最安全的,比传统的 session 还安全。

JWT 本身其实并没有什么用处....

然后现在,我更建议:

用户登录:WebAuthn 协议 / Passkey 方式

登录成功后保持会话:Session 会话机制 / PASETO 格式

但是,很可惜,在浏览器上,有安全的方式,但是对于原生应用,尤其是手机端的 APP ,目前好像没有更有效的方式。

JWT 的优势

其实,它也不是没有优势。

比如,如果以 API 秘钥的形式使用,无需使用数据库连接来进行验证,这一下子轻松不少。

标签: 原创 JWT