jwt 和传统的 session、cookie 的争议 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
zw1234
V2EX    程序员

jwt 和传统的 session、cookie 的争议

  •  
  •   zw1234 2020-06-06 17:38:09 +08:00 6264 次点击
    这是一个创建于 1951 天前的主题,其中的信息可能已经有所发展或是发生改变。
    jwt 和传统的 session 、cookie 的争议

    jwt 和传统的 session 、cookie 有啥优缺点,token 未来是否会取代 session 、cookie ?

    请发表你的观点

    17 条回复    2020-06-08 03:04:27 +08:00
    butterf1y
        1
    butterf1y  
       2020-06-06 17:40:00 +08:00
    TimPeake
        2
    TimPeake  
       2020-06-06 17:49:41 +08:00   3
    楼主我告诉你个技巧 这种话题 ,要用引战的形式,直接标题定死了:"jwt 才是未来主流,吊打 cookie"。诸如此类。
    十分钟后,长篇大论回复 99+
    lhx2008
        3
    lhx2008  
       2020-06-06 17:51:00 +08:00 via Android
    jwt 适合安全性不高,或者鉴权功能小且固定的业务。
    chen1164162915
        4
    chen1164162915  
       2020-06-06 17:53:20 +08:00   1
    JWT 注销 token 是个难题
    用 redis 或者数据库就脱离 JWT 的初衷了
    tomczhen
        5
    tomczhen  
       2020-06-06 18:03:47 +08:00 via Android   1
    无非就是 server side 或者 client side,然后实现不同,细节不同,偏向不同。
    ericls
        6
    ericls  
       2020-06-06 18:24:20 +08:00 via iPhone
    没啥区别 一般面向用户的服务还是不会把所有用户数据存在 token 里。

    就当是同一个东西放在了 http headers 的不同地方。


    你把 session key 放在 authentication header 他是 session key 还是 token?
    zw1234
        7
    zw1234  
    OP
       2020-06-06 18:32:31 +08:00
    @TimPeake 学习了,佩服佩服
    also24
        8
    also24  
       2020-06-06 19:55:19 +08:00
    @sriidtied #1
    哈哈哈哈我也想说
    nvkou
        9
    nvkou  
       2020-06-06 20:21:21 +08:00 via Android
    jwt 本身的问题可以通过协议解决。saml, openid connect 等有回调域检测,cros 控制等加强安全性。
    对于业务来说,jwt 声明了我是谁以及一些公开信息。放隐私信息是开发者的锅。当然 jwt 也用于角色权限控制,但防篡改机制已经足够安全,客户端不验签,不向鉴权服务器查询状态才是问题。

    jwt 的好处是可以通过 refresh token 刷新,由客户端自行判断。在特定场景还能实现离线使用。

    隐私真不是问题,能获取 token 都是能过验证的,密码,数字证书都 行。你自己提供的信息谈何泄漏?
    hantsy
        10
    hantsy  
       2020-06-06 20:50:43 +08:00
    @ericls

    Token 这东西本身有透明和不透明之分,JWT 是种典型透明的 Token,可以直接拿到用户基本信息,比如用户,scopes/roles 等,用于 API 权限判断。但安全性还是有保障,由服务器生成,其密钥或者 SecretKey 是在服务器,JWT Token 信息无法篡改。

    不透明的 Token 在服务器上还需要额外一步从 IDM 上取得用户信息。

    Spring Session 抽象了 HttpSession 概念, 支持用 Redis,Jdbc,Mongo 等实现,也可以通过 header 传递 Session 。每次传递到服务器从 Session Repository 中恢复 Session 用户安全信息,构建 SecurityContext 。

    https://github.com/hantsy/spring-microservice-sample#secures-microservice

    个人觉得 Spring Session 操作性上高于纯 JWT Token 的方式,它可以显式 Logout (调用 Sesision 的 invalidate 即可 )。
    mreasonyang
        11
    mreasonyang  
       2020-06-06 21:47:04 +08:00 via iPhone
    小业务用哪个都行,大业务没人用这些,都是各种自定义的魔改 token 机制
    wangyzj
        12
    wangyzj  
       2020-06-06 22:45:19 +08:00
    哪个合适用哪个呗
    各有优缺点
    Austaras
        13
    Austaras  
       2020-06-07 00:53:12 +08:00
    JWT+refresh token 是最好的机制, 就是前端的复杂度有点高, 当然随便拿 rx{js, java, swift}封装一套就好
    yanguango
        14
    yanguango  
       2020-06-07 08:08:02 +08:00 via Android
    AmiKara
        15
    AmiKara  
       2020-06-07 17:49:04 +08:00
    还是那句老话:脱离业务谈技术都是耍流氓
    tairan2006
        16
    tairan2006  
       2020-06-07 20:07:44 +08:00 via Android
    从来没用过这玩意儿,都是直接用 uuid 当 token…
    xuanbg
        17
    xuanbg  
       2020-06-08 03:04:27 +08:00
    JWT 如果是仅用于身份认证那是极好的,但用于比较复杂的后台管理系统就不太合适。如我司的后台权限高达数千项之多,如果都放在 jwt 字符串里面,那是要死人的节奏。

    所以我司系统发给用户的 token 就是一个 base64 编码后 116 位长度的字符串。解码后就是:{"id":"b016b5a2bd0147c897246d376c79f668","secret":"a4fa0f2d7c65437da86e5efab2837824"}这样的简单结构。授权信息在服务端的 token 里面,服务端 token 存在 redis 上面。把一个 token 一分为二,就像古代的虎符。用户只要拿能够代表其身份的一半就行了,其他数据反正只需要在服务端验证身份之后才会用到,就不需要给用户了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5671 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 06:30 PVG 14:30 LAX 23:30 JFK 02:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86