现在 session 是主流还是 jwt + refresh token 是主流?

4 月 4 日
 zhouhuab

徘徊了好几年,看了好多文章,也问了 chatgpt ,现在想看看生产中用到都是啥?

5070 次点击
所在节点    程序员
34 条回复
Bingchunmoli
4 月 4 日
混合 jwt+session 算什么, 还有看见很多大肠的 token 不是标准的 jwt 是用了自己私有算法还是什么 其他的,jwt 确实太长了
ZeroDu
4 月 4 日
用最简单的方案,生成的 uuid 然后存到 redis
netnr
4 月 4 日
同时支持 Cookie 和 JWT
zed1018
4 月 4 日
@w568w #10 JWT 设计思路本身也是不支持 revoke ,要 revoke 就得加黑名单,然后分布式服务各自要集中查询黑名单,那还不如一开始就不要用 JWT 。所以一般我理解的用 JWT 就不考虑 revoke ,而是把单个 token 时间给的足够短,然后 revoke refresh token 。
Oktfolio
4 月 4 日
大厂都还是 cookie + 随机字符串( sessionid )
giter
4 月 4 日
@Oktfolio 这么多年前就开发了的产品,使用 Cookie 或 Session 都正常。后面开发的项目基本都是双 Token 机制
BadAngel
4 月 4 日
今后不应该是 阅后即焚 吗
way2explore2
4 月 5 日
@zed1018 正解,
sunwangme
4 月 5 日
我自己现在更偏向按场景分,不会把 jwt + refresh token 当默认答案。

如果是传统 Web 、内部系统、或者 BFF 比较重的场景,我通常还是 session / cookie + 服务端 session id 。原因很简单:可控,能随时 revoke ,权限变更、强退、风控这些处理起来都顺手。

如果是多端客户端、开放 API 、跨域比较多,才更容易上 access token + refresh token 。但我实际落地时也很少做成“纯无状态 jwt”,最后还是会在服务端保留一层会话或版本校验,不然撤销登录和风控会很别扭。

所以我理解现在不是谁成了绝对主流,而是:
Web / 第一方业务:session 依然很常见
多端 / 开放场景:token 双令牌更多
生产里更常见的其实是混合用,优先选自己最容易控风险的方案。
yungo8
4 月 5 日
@craftsmanship 主张的网页端我没看出来。但是给第三方 app 提供的接口,手动创建的 token 是固定 180 天有效期的,具体见文档 https://www.v2ex.com/help/personal-access-token
v2Geeker
4 月 5 日
OIDC
uni
4 月 5 日
3 楼正解,api 用 jwt ,用户登录流程用 session 。我现在做的小程序,给小程序用的 api 用 jwt ,小程序的 web 后台用的 session
c3de3f21
4 月 6 日
真的有无状态应用吗,但凡上个 redis 都不算无状态吧
flytsuki
4 月 7 日
jwt 生成 token,redis 控制有效期

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

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

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

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

© 2021 V2EX