JWT学习| 青训营笔记

97 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记。

Sesson和Cookie中的一些问题

Sesson和Cookie这里就不进行赘述

Sesson的问题是需要在服务端进行一次记录,当用户多的情况下服务端的开销会明显增大

Cookie的问题时如果Cookie在传输的过程中被截获,用户就很容以收到跨站请求伪造的攻击

JWT

JWT是由三部分信息所拼接而成的一个字符串,这三个部分分别是:

  • header

    • 这里存储了两部分的信息一个时类型的声明,一个是加密算法的声明,表示对后面数据加密使用的是那种加密算法
//类似这个样子
{
   'typ' : 'JWT'
   'alg' : 'HS256' 
}
之后将头部信息进行base64加密,就构成了字符串中的第一部分
  • playload

    • 这个部分存储了一些字段信息,向JWT过期时间、JWT身份唯一标识(主要用来作为一次性token,回避重放攻击)等字段,在这里面不能够存储一些data信息,这里的数据是能够被解密出来的
{
  "name" :"xxx"
  "id"   :"xxx"
  .....
}
然后也对其进行base64加密得到第二部分
  • signature

    • 第三部分是jwt的一个签证信息这个信息由前面两部分的结果和secret三部分组成
    • 这个部分通过前面两个加密的组合 header +'.'+playload同时进行加盐secret组合加密构成jwt的第三部分

最终将上面三个部分拼接在一起就组成最终的JWT

ps:secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。