之前的一个项目是 RESTful API (可能也不是很标准啦),用的 JWT 做认证。现在要加个会话管理的功能,可以查看登录的会话(包括登录方式,IP 等信息),可以吊销某个会话。
目前想按照这篇文章的方式实现(结合 session 和 jwt 的方式): https://clerk.com/blog/combining-the-benefits-of-session-tokens-and-jwts
请问各位大佬们,你们都是怎么实现的啊?
1
wu67 35 天前 via Android
redis 里面存黑名单,命中就要求重登?
|
2
codehz 35 天前
非要说的话,黑名单模式可以用布隆过滤器(定期重建并分发到每一个处理节点),有假阳性的时候才会去查数据库
|
3
sagaxu 35 天前 3
加了集中式存储的 JWT ,那跟直接用 session 有啥区别
|
4
chobitssp 35 天前
jwt 的颁发时间小于吊销时间就踢出
|
5
vZexc0m 35 天前
和 JWT 的设计初衷背道而驰了。你这种直接用 cookie ,然后服务端管理 cookie 就行。
|
9
paradox8599 35 天前 via Android
那应该就不用 jwt 了,jwt 主打一个无状态
|
10
crysislinux 35 天前 via Android
还是用传统 session 吧,jwt 干用户登录这个活儿是真的不太方便
|
11
wunonglin 35 天前
就 session 啊,jwt 玩的是无状态,把 jwt 玩成有状态的话那么和不就是重新发明 session ?
|
12
hallDrawnel 35 天前
直接用 session
或者不好改得话,做成 jwt 版本的 session 就 ok 。不用拘泥于标准。 |
13
vjnjc 35 天前 via Android
正在做登录,一楼正解
|
14
chendy 35 天前
对于客户端,传统 token 机制(包括 cookie 里放 sessionid )默秒全
jwt 还是留给服务内部互相调用使用吧 |
15
Spute 35 天前
jwt 的主要优点就是无状态,对于服务端来说无需保存会话状态。如果有主动撤销 jwt 的需求,好像只能使用黑名单机制,这样一来又变成有状态了。
|
16
fffq 35 天前
session 放 cookie ,那 cookie 禁用了咋办?
|
17
StoneHuLu 34 天前
你们说的 session 是存内存的 session 还是说内部实现是存 redis 的,如果是前者,需要横向扩展,有负载均衡的场景不就炸了吗,如果是后者,那不就是一般的 token 存 redis 的方式么
|
19
skai0dev OP 不是面向 C 端的,所以基本不会有这种情况。
|
20
monkeyk 33 天前
JWT 的 payload 中有一个字段叫 jti ,唯一的,是可以用来作为会话 ID 存的;
做会话管理的话,存 jti 就可以了;能用 redis 使用 TTL 属性过期自动释放,就能实现一套完整的会话管理。 但如何客户端只是浏览器的话,session 就够了。 |
21
fuxinya 24 天前
access token 有效期设置短一点,过期后,拿着 refresh token 去换取 access token ,换取时,校验是否要被踢下线即可
|