为什么微服务架构里网关都是用 JWT 鉴权,而不是用 Session 鉴权?不是也有基于 Redis 实现的分布式 Session 吗?

176 天前
 yodhcn
4530 次点击
所在节点    程序员
33 条回复
relsoul
176 天前
没人回答来简单答答....

jwt 多方便啊,不用中心态维护,直接做校签就行。(当然你也可以用 redis 来维护 jwt )

只要微服务的配置中心的密钥一致,那么无论什么微服务都不用依赖 redis ,直接本地做校签,减少架构依赖性。不过某种意义上来说 jwt 也是一种 session ,去中心化的 session 。
wu00
176 天前
即便是有中心化管理(踢人等)会话的需求,redis+jwt token 也比共享 session+cookie 简单好用;
如果不需要会话管理,无状态的 jwt token 就更好用了,而 session 还是必须做中心共享。
Chad0000
176 天前
JWT 主要是为了本地就可以鉴权,否则这么多服务都请求中心的 Session ,性能是个问题。
sujin190
176 天前
干掉 redis 可以省成本不好么。。虽然大型站要做风控并不能做到完全不在服务器保存数据,但是能省一点是一点吧

其实也就是服务器保存还是客户端保存的问题,客户端存储中小型站少个依赖简单便宜性能好又无需考虑风控,再加上各种框架库支持完善又跨语言跨平台跨集群使用广自然了,生态好也是优势啊而且是大优势,但也没说 JWT 就是完美无敌的吧,中大型站嘛自然是啥都要,区分也就不大了
Nazz
176 天前
因为半桶水的人写了鉴权服务
dddd1919
176 天前
不懂 JWT ,理解 JWT ,成为 Session
见过的很多用 JWT 并搞不清楚使用场景,还要像 Session 一样做缓存加校验,只把它当 Session id 一样使用
coderzhangsan
176 天前
慢慢的你就会明白,大部分都会回到服务端鉴权,最终就是不伦不类的 JWT ,因为总有些需求,必须让你在服务端做鉴权服务,譬如单点登录,踢人等等。
yodhcn
176 天前
@wu00 #2
- JWT 怎么做会话管理?
- 如果 JWT 会话管理需要依赖 Redis ,与直接用 Redis 做 token 校验有什么区别?优势体现在哪里?

能请老哥展开讲讲吗?不太了解 JWT
murmur
176 天前
jwt 本质上和 session 没区别,一种实现形式而已,就那么多复杂的权限和用户信息你 token 想写多长?更别说现在安全要求强制踢下线的功能
murmur
176 天前
@wu00 除非你不做数据权限,或者简单到行数据直接对应有权限的人,稍微复杂的权限都是得查表的,这权限可能还是实时变化
gitrebase
176 天前
@dddd1919 老哥能讲讲吗,我现在用 JWT 就是在里面存一个 user id ,或者再存个 user role ,就不知道别的用法了
kkk9
176 天前
Niphor
176 天前
想法是好的,JWT 随着需求变来变去,最终就变成了为了完成 KPI ,退化为一个 Id 而已(变成了 Session )
Qjues
176 天前
@yodhcn #8 楼 需要会话管理的,就不要用 jwt ,直接 token 就好了,之前公司就有团队新写的鉴权服务,又 jwt ,然后每次都再走一遍 redis token ,检查,不伦不类的。
1. session+cookie
2. jwt
3. redis
jwt+redis 个人认为真没啥意义。(当然在不同产品线上,可以有部分只用 jwt ,有部分加一层 redis 检查)
cowcomic
175 天前
登录侧基本不用 jwt ,登录踢人,顺延登录时间等等这些东西单用 jwt 都不好弄,还得后台记录,跟 session 没啥区别,反而还要自己维护,包括多 jwt 之间的冲突,分布式 session 现在也很成熟,直接使用就行
现在 jwt 基本就只用在开放 API 做认证以及开放页面组件会面临跨域的情况下,这些场景是能体现 jwt 简单方便的一面的
afeiche
175 天前
没有会话的话就做成那种带时间戳的 token ,有会话感觉还是用 session 靠谱
Conantv2
175 天前
在部分场景 jwt 跟布隆过滤器作用类似,通过的不一定真的能通过,但是不通过的就一定不通过。

比如回复评论,单一 token 模式每个请求你都得查后端,用 jwt 的话在边缘脚本就可以先验签,无效签名和 jwt 中没有权限的可以直接拒绝,剩下的请求才打到后端,虽然剩下的也不一定有效的,还是要查库,但是查库请求大量降低了。
lambdaq
175 天前
如果你要问两者优劣,楼下老哥可以给你洋洋洒洒一大篇

如果你要问为什么,那么一句话就可以结题了:因为培训班只教 jwt
nothingistrue
175 天前
先想想 Session 是什么,微服务之间能不能有 Session 。
BeautifulSoap
175 天前
jwt 等同于互联网古早时期直接在 cookie 里塞用户名/用户 id ,然后服务器获取 cookie 里的用户名/用户 id 后直接登录(当然用户名/id 相关字段是加密的)。它和 jwt 的区别也就 jwt 有效时间非常短,又有签名可以防篡改,除此之外缺点一模一样。比如因为非中心化,发出去的 cookie/jwt 你没法主动让其无效,只能干等着。生成 jwt 的密钥一旦泄露,攻击者就可以捏造任意的 jwt 登录任意账户而服务端没办法检验

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

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

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

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

© 2021 V2EX