jwt校验与session校验的比较及相关分析

我写过的相关内容

session校验的原理

session校验,就是在用户第一次登录之后,服务端生成一个和用户id绑定的串码,然后将这个串码放到内存中,然后将串码存到cookie里。客户端第二次请求的时候, 通过识别cookie中是否存在session以及session是否正确,来进行登录校验

缺点有下面这几个

  • 1.内存会越来越大
  • 2.存在cookie里的话,容易收到csrf攻击,关于csrf攻击看这里
  • 3.在用ngix的时候,由于只能在特定服务器内存中才有对应的session,会限制ngix的性能

jwt构成

jwt分成三个部分,前两部分是base64转码的字符串,第三部分是通过前两部分和一个密钥,进行加密生成的。

  • 第一部分$header基本上是固定的,不用改它,就是个声明。
  • $playload是涉及到的参数,都是自定义的,转成base64,基本上跟明文没什么区别。就是把自己想用的一些不是特别敏感的参数放上
  • $signature这部分才是重头戏,他是根据前两个+自己定义的secret加密成的token。之所以要用前两个参数参与加密,就是防止 前两个参数被私自篡改。如果被改之后,第三个参数由于加密规则不符,所以可以失败

jwt校验原理

放在一个自定义属性里,每次都发送到服务器,跟身份证似的。由于第三部分是有前两部分加密形成的,这样保证了自己解析到的信息不是被篡改过的。

优点

感觉跟http的无状态链接是一个意思,请求完就完事,不拖泥带水,很灵活

缺点

省去了session消耗内存的过程,但是每次请求接口都要有一步校验和解密的过程,加大了服务器的运算量。

随机浏览