初学对 jwt 的一点疑惑 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rqxiao
V2EX    问与答

初学对 jwt 的一点疑惑

  •  
  •   rqxiao 2020-02-26 10:35:44 +08:00 1972 次点击
    这是一个创建于 2061 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近了解了 spring security,oauth2.0 以及 spring security oauth2 的搭建。

    spring security oauth2 默认 token 放在内存,也可以配置把 token 放在 redis 里。这样每次请求生成一个 token 就把 token 存起来。

    在客户端发出的默认 token 调用业务接口时 ,要去服务器 里存贮( redis )的地方去查找一次 ,才知道 这个令牌包含什么信息,并且确认令牌是否有效。

    这些 token 是一种无意义的字符串( uuid ),本身并不包含任何的信息。

    但 jwt 这种 token 自带了一些用户信息的 token,可以直接从令牌中解析出用户信息。就比如服务端配置了 jwt 的令牌模式,第一次通过密码模式请求 oauth/token 获得了一个 jwt。接着去访问一个 /hello 的接口 我带着这个用户信息的令牌 ,去访问 。访问成功,这一步服务端,有没有去一个存储的地方去确认?是怎么确认你发的 jwt 是有效的呢

    8 条回复    2020-02-26 21:46:48 +08:00
    Vegetable
        1
    Vegetable  
       2020-02-26 10:43:03 +08:00
    jwt 本身能证明自己不是伪造的,只要你的签名没泄露。这也是它存在的意义避免服务端储存“状态信息”

    然后实际应用中经常有人会保存一些”状态信息“或者 jwt 本身,因为 jwt 是无法单独作废的。
    Jacky23333
        2
    Jacky23333  
       2020-02-26 10:52:15 +08:00 via Android   3
    jwt 包含三个东西,第一个是 header,里面指定了加密算法,第二个是 payload,里面包含了需要传递的数据,通常包括标识用户身份的信息比如用户 id,还有签发人跟过期时间等等,第三部分是签名,就是通过算法对前面 payload 进行加密得到加密串。所以当你服务端收到 token 之后,你就通过相同的算法对 payload 进行加密,加密完和签名进行对比,如果一致那就说明 payload 没被篡改过,数据都是可信的,所以你也就可以知道了用户的真实身份,相反的,如果跟签名不符合,那就说明 payload 被修改过,token 无效。如果只是简单的鉴权功能,服务端是不需要保存 token 信息的,除非你系统需要把某个 token 拉黑等等操作才需要保存 token 进行对比
    lianglianglee
        3
    lianglianglee  
       2020-02-26 15:37:26 +08:00   1
    简单来说 JWT 分为部分 header, payload, signature,签名包含:header(base64) payload(base64) secret
    服务端只需要验证签名,签名有效则 JWT 里的 playload 就有效
    一般 playload 存放当前用户的唯一标识
    ymz
        4
    ymz  
       2020-02-26 18:11:14 +08:00
    @Jacky23333 如果篡改了 payload,同时再根据 header 里算法加密修改后的 payloy,然后将现在的加密串替换原来的。 不就整个篡改了?
    yimity
        5
    yimity  
       2020-02-26 18:20:40 +08:00
    @ymz 去看下实现或者说规范,你这个人家也考虑到了。
    rqxiao
        6
    rqxiao  
    OP
       2020-02-26 18:32:48 +08:00
    @ymz 3l 说到了 还有个 secret sercet 是服务端的 不能泄露的,应该是这个
    ymz
        7
    ymz  
       2020-02-26 19:18:49 +08:00
    @rqxiao 就类似盐的
    Jacky23333
        8
    Jacky23333  
       2020-02-26 21:46:48 +08:00 via Android
    @ymz 要加盐的,因为回复篇章原因,就没有说得那么详细
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2304 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 01:16 PVG 09:16 LAX 18:16 JFK 21:16
    Do have faith in what you're doing.
    ubao msn 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