V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
rqxiao
V2EX  ›  问与答

初学对 jwt 的一点疑惑

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

    最近了解了 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   ·   实用小工具   ·   2690 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 12:34 · PVG 20:34 · LAX 04:34 · JFK 07:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.