JWT 可以实现 stateless authentication,但是 refresh token 不是无状态的,那 JWT 的意义是什么?

2021-03-02 16:52:20 +08:00
 JasonLaw

相关资料:

我的疑问:

如果使用 JWT 实现 stateless authentication 的话,那么肯定会使用到 refresh token,也就是会存储 refresh token 和 user 的对应关系。那么为什么还要使用 JWT 呢?为什么不直接使用opaque token呢?

额外阅读:

Authentication as a Microservice - YouTube

5264 次点击
所在节点    程序员
49 条回复
frankly123
2021-03-03 09:11:36 +08:00
@qwerthhusn 做到后面你会发现还是有状态的
CoreJa
2021-03-03 09:36:14 +08:00
看业务需求吧,jwt/stateless token 的好处在于分布式场景,refresh token 纯属后来发现登出的场景不得不用到。但是 access token/refresh token 还是有实际意义的,至少使用 access token 的请求不需要走内存 /redis,而用 session 的话你每个请求都得查 session 。对于高并发场景的意义还是比较大的。
leeg810312
2021-03-03 09:44:50 +08:00
我觉得好多人因为 jwt 有无状态这个特性很纠结,好像非用这个特性不可,而忽略其他重要的特性。如果你深入看 jwt,就能理解 jwt 的无状态只是一个附带的特性,不是主要特性,是可以做成服务端无状态,而不是必须做成无状态
hj24
2021-03-03 09:45:43 +08:00
@Solace202 这样不还是有状态的了吗
wolfie
2021-03-03 09:49:26 +08:00
那种带 refresh token 的,当 session id 用。也有服务端不存储的。
Rocketer
2021-03-03 10:16:45 +08:00
这种基于 Token 的验证方式,其实与证书的用法完全一致。

证书发出去以后,所有客户端都可以离线自行验证,只要证书没过期,就认为是有效的,这对绝大多数情况足够了。

同时 CA 那里还有个吊销列表,对于要求较高的客户端,可以定期更新吊销列表,并在证书的有效性验证中增加一步,检查证书是否在吊销列表中。

Token 的目的是离线验证,即使有吊销列表,你也不能实时使用最新的吊销列表来查验,否则不如直接做成有状态的了。

无状态是一种妥协,降低部分安全性,提高集群性能。它并不适合所有场景,不要硬往有状态的特性上面靠。
dcoder
2021-03-03 13:20:36 +08:00
看到很多人都在抱怨 JWT, 我就放心了
JWT 嘛其实天生就是残的...
sozengtao
2021-03-03 13:26:36 +08:00
其实这个问题简单 。只需要在 Redis 里面重新校验一次 Valid 就好了 。Redis 也可以手动过期
jeffwcx
2021-03-03 13:26:53 +08:00
如果要主动刷新 token,其实可以不用 jwt

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/757713

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX