[不懂就问]JWT 中 header 和 signature 真的有必要存在吗?直接使用 payload 部分对称加密不好吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
copymaster
V2EX    问与答

[不懂就问]JWT 中 header 和 signature 真的有必要存在吗?直接使用 payload 部分对称加密不好吗

  •  1
     
  •   copymaster 2021-08-01 00:14:36 +08:00 2503 次点击
    这是一个创建于 1532 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在看 jwt 就觉得很疑惑,毋庸置疑 jwt 使用非常广,但我怎么也没想明白 header 和 signature 这两部分返回给客户端有什么用,到头来还是客户端再发回来后端做校验 直接使用对称加密,比如 aes,来加密返回给客户端不好吗?客户端修改之后回来再解密肯定出错

    我能想到的使用 jwt 加 salt 而不使用对称加密的唯一原因就是性能考虑,关于这一点我也不是很确定

    第 1 条附言    2021-08-01 09:50:03 +08:00
    感谢各位解答疑惑,之前没想到 jwt 中的数据是给客户端看的,还以为只是一个令牌
    不过我现在又有新的想法了:
    用户登录的时候额外多生成一个 key 发送给服务器,服务器吧这个 key 放到加密的 token(这个密钥只有后端有)中,一些敏感数据就可以使用对称加密算法来通信了
    13 条回复    2021-08-01 09:54:53 +08:00
    future0906
        1
    future0906  
       2021-08-01 00:25:16 +08:00
    一个是签名,一个是加密,两个不是同一个东西。加密完以后客户端还怎么读 payload 和 header 的内容?
    oott123
        2
    oott123  
       2021-08-01 00:42:17 +08:00 via Android   1
    > 客户端修改之后回来再解密肯定出错
    不正确。事实上如果不带 AEAD 的加密算法,是无法保证原文不被修改的。

    > jwt 为什么不加密

    Although JWTs can be encrypted to also provide secrecy between parties, we will focus on signed tokens. Signed tokens can verify the integrity of the claims contained within it, while encrypted tokens hide those claims from other parties. When tokens are signed using public/private key pairs, the signature also certifies that only the party holding the private key is the one that signed it.

    以上说明来自官网介绍 https://jwt.io/introduction
    ZeawinL
        3
    ZeawinL  
       2021-08-01 01:05:34 +08:00 via Android
    我觉得 JWT 只是一种规范。
    会指定算法名称,是因为加密或者签名,它不依赖于攻击者不知道你用的什么算法。
    Puteulanus
        4
    Puteulanus  
       2021-08-01 01:43:59 +08:00
    像一楼说的,加密了客户端不就没法读了
    客户端要是不用读那给他全文干啥,存在服务端给它个 session id 不就完了,连加密都省了
    nvkou
        5
    nvkou  
       2021-08-01 01:56:19 +08:00 via Android
    保持完整性比加密重要。对称加密你要一用户一密钥吗?还是一 session 一密钥呢?服务开销大不大?密钥交换怎么解决?重放攻击能挡得住不?
    由于 jwt 是可信端签发的单向数据,仅作签名验证权威性和保证完整性就足够了,没人逼你在 jwt 放用户余额等业务数据。
    完整的 jwt 还含有多种 token 来保障业务需求,比如服务端主动过期 session 。业务合适的话 jwt 方案不失为一套快速解决方案。个人还是倾向 saml 。
    Microkernel
        6
    Microkernel  
       2021-08-01 02:27:26 +08:00
    JWT 是为了客户端能看不能改
    Rocketer
        7
    Rocketer  
       2021-08-01 07:18:13 +08:00 via iPhone
    如果不需要给客户端读,只是原样返回的话,那没必要用 jwt,直接发个 token 就行了,token 里可以密文存储用户身份,别人都不知道怎么解密,只有你自己能看
    ysc3839
        8
    ysc3839  
       2021-08-01 07:57:20 +08:00 via Android
    JWT 可以把 payload 加密,不加密的是为了让客户端也能读取里面的数据。
    lululau
        9
    lululau  
       2021-08-01 08:44:23 +08:00 via iPhone   1
    想想为什么会存在 iss,就明白为什么非对称加密(签名和校验)在某些场景下是必须的了
    skinny
        10
    skinny  
       2021-08-01 09:06:26 +08:00
    更主要的原因是没必要,基本功能是身份验证,表示确实是这个人发的,但你加密了 payload 也需要 js 解密,而 js 通常是通过 https 发给客户端的,流量已经被加密了,再加密也是多此一举,如果你的环境连 https 都无法保证秘密和安全了,加密也没有用,攻击者可以改你的 js 或相关的流量;如果你说你走别的渠道分发客户端代码,并使用双向认证,你分发的渠道还是会面临这个问题,当然,这可能可以提高攻击者的成本和难度,但这需要一系列的安全加固,任何一个地方出现问题就白干了(木桶效应)。
    skinny
        11
    skinny  
       2021-08-01 09:13:03 +08:00
    @skinny 当然,https 不能信任了,签名也白搭,所以只需要最基本的验证,还有是防止重放这些
    copymaster
        12
    copymaster  
    OP
       2021-08-01 09:52:06 +08:00
    @skinny 之前是没想到 payload 是给客户端看的,一直以为是给后端看的...
        13
    copymaster  
    OP
       2021-08-01 09:54:53 +08:00
    @Puteulanus session 生命周期太短,而且使用 jwt 就是为了后端不保存
    copymaster
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     907 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 21:59 PVG 05:59 LAX 14:59 JFK 17:59
    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