RESTful API / JWT 是不是没法做登录会话管理啊

58 天前
 skai0dev

之前的一个项目是 RESTful API (可能也不是很标准啦),用的 JWT 做认证。现在要加个会话管理的功能,可以查看登录的会话(包括登录方式,IP 等信息),可以吊销某个会话。

目前想按照这篇文章的方式实现(结合 session 和 jwt 的方式): https://clerk.com/blog/combining-the-benefits-of-session-tokens-and-jwts

请问各位大佬们,你们都是怎么实现的啊?

2815 次点击
所在节点    Java
21 条回复
wu67
58 天前
redis 里面存黑名单,命中就要求重登?
codehz
58 天前
非要说的话,黑名单模式可以用布隆过滤器(定期重建并分发到每一个处理节点),有假阳性的时候才会去查数据库
sagaxu
58 天前
加了集中式存储的 JWT ,那跟直接用 session 有啥区别
chobitssp
58 天前
jwt 的颁发时间小于吊销时间就踢出
vZexc0m
58 天前
和 JWT 的设计初衷背道而驰了。你这种直接用 cookie ,然后服务端管理 cookie 就行。
skai0dev
58 天前
@wu67 不太好用 redis ,因为是 windows 系统
skai0dev
58 天前
@sagaxu 我看那个文章里的是 jwt 用于请求,签发新 token 的时候用 session ,不过用啥不重要啦,主要是实现这个功能。
skai0dev
58 天前
@vZexc0m 嗯嗯,没得办法,这个功能好像如果只用 JWT 的话不太好实现
paradox8599
58 天前
那应该就不用 jwt 了,jwt 主打一个无状态
crysislinux
58 天前
还是用传统 session 吧,jwt 干用户登录这个活儿是真的不太方便
wunonglin
58 天前
就 session 啊,jwt 玩的是无状态,把 jwt 玩成有状态的话那么和不就是重新发明 session ?
hallDrawnel
58 天前
直接用 session
或者不好改得话,做成 jwt 版本的 session 就 ok 。不用拘泥于标准。
vjnjc
58 天前
正在做登录,一楼正解
chendy
58 天前
对于客户端,传统 token 机制(包括 cookie 里放 sessionid )默秒全
jwt 还是留给服务内部互相调用使用吧
Spute
58 天前
jwt 的主要优点就是无状态,对于服务端来说无需保存会话状态。如果有主动撤销 jwt 的需求,好像只能使用黑名单机制,这样一来又变成有状态了。
fffq
58 天前
session 放 cookie ,那 cookie 禁用了咋办?
StoneHuLu
58 天前
你们说的 session 是存内存的 session 还是说内部实现是存 redis 的,如果是前者,需要横向扩展,有负载均衡的场景不就炸了吗,如果是后者,那不就是一般的 token 存 redis 的方式么
lvajax
58 天前
@chobitssp 我就是这样做的
skai0dev
58 天前
不是面向 C 端的,所以基本不会有这种情况。
monkeyk
56 天前
JWT 的 payload 中有一个字段叫 jti ,唯一的,是可以用来作为会话 ID 存的;
做会话管理的话,存 jti 就可以了;能用 redis 使用 TTL 属性过期自动释放,就能实现一套完整的会话管理。
但如何客户端只是浏览器的话,session 就够了。

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

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

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

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

© 2021 V2EX