V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
skai0dev
V2EX  ›  Java

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

  •  
  •   skai0dev · 10 天前 · 2255 次点击

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

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

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

    第 1 条附言  ·  10 天前
    看了一些有这个功能的网站( GitHub ,Postman ),好像 cookie 里也没有 jwt
    第 2 条附言  ·  9 天前
    感谢各位大佬,决定还是改成 session 认证吧
    20 条回复    2024-10-30 19:07:25 +08:00
    wu67
        1
    wu67  
       10 天前 via Android
    redis 里面存黑名单,命中就要求重登?
    codehz
        2
    codehz  
       10 天前
    非要说的话,黑名单模式可以用布隆过滤器(定期重建并分发到每一个处理节点),有假阳性的时候才会去查数据库
    sagaxu
        3
    sagaxu  
       10 天前   ❤️ 3
    加了集中式存储的 JWT ,那跟直接用 session 有啥区别
    chobitssp
        4
    chobitssp  
       10 天前
    jwt 的颁发时间小于吊销时间就踢出
    vZexc0m
        5
    vZexc0m  
       10 天前
    和 JWT 的设计初衷背道而驰了。你这种直接用 cookie ,然后服务端管理 cookie 就行。
    skai0dev
        6
    skai0dev  
    OP
       10 天前
    @wu67 不太好用 redis ,因为是 windows 系统
    skai0dev
        7
    skai0dev  
    OP
       10 天前
    @sagaxu 我看那个文章里的是 jwt 用于请求,签发新 token 的时候用 session ,不过用啥不重要啦,主要是实现这个功能。
    skai0dev
        8
    skai0dev  
    OP
       10 天前
    @vZexc0m 嗯嗯,没得办法,这个功能好像如果只用 JWT 的话不太好实现
    paradox8599
        9
    paradox8599  
       10 天前 via Android
    那应该就不用 jwt 了,jwt 主打一个无状态
    crysislinux
        10
    crysislinux  
       10 天前 via Android
    还是用传统 session 吧,jwt 干用户登录这个活儿是真的不太方便
    wunonglin
        11
    wunonglin  
       10 天前
    就 session 啊,jwt 玩的是无状态,把 jwt 玩成有状态的话那么和不就是重新发明 session ?
    hallDrawnel
        12
    hallDrawnel  
       10 天前
    直接用 session
    或者不好改得话,做成 jwt 版本的 session 就 ok 。不用拘泥于标准。
    vjnjc
        13
    vjnjc  
       10 天前 via Android
    正在做登录,一楼正解
    chendy
        14
    chendy  
       9 天前
    对于客户端,传统 token 机制(包括 cookie 里放 sessionid )默秒全
    jwt 还是留给服务内部互相调用使用吧
    Spute
        15
    Spute  
       9 天前
    jwt 的主要优点就是无状态,对于服务端来说无需保存会话状态。如果有主动撤销 jwt 的需求,好像只能使用黑名单机制,这样一来又变成有状态了。
    fffq
        16
    fffq  
       9 天前
    session 放 cookie ,那 cookie 禁用了咋办?
    StoneHuLu
        17
    StoneHuLu  
       9 天前
    你们说的 session 是存内存的 session 还是说内部实现是存 redis 的,如果是前者,需要横向扩展,有负载均衡的场景不就炸了吗,如果是后者,那不就是一般的 token 存 redis 的方式么
    lvajax
        18
    lvajax  
       9 天前
    @chobitssp 我就是这样做的
    skai0dev
        19
    skai0dev  
    OP
       9 天前
    不是面向 C 端的,所以基本不会有这种情况。
    monkeyk
        20
    monkeyk  
       8 天前
    JWT 的 payload 中有一个字段叫 jti ,唯一的,是可以用来作为会话 ID 存的;
    做会话管理的话,存 jti 就可以了;能用 redis 使用 TTL 属性过期自动释放,就能实现一套完整的会话管理。
    但如何客户端只是浏览器的话,session 就够了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1033 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 22:03 · PVG 06:03 · LAX 14:03 · JFK 17:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.