【JAVA】JWT 与 cookie session

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chiweitree/article/details/83309327

共享session相信大家都用过,为了解决http无状态的问题,都会通过cookie、session共享来解决用户状态共享的问题,一般都是通过cookie来保存sessionid,服务端通过sessionid在内存中取出用户的信息,做后续操作。但是在前后端分离越来越流行的情况下,cookie似乎不那么通用了,出现了更好的解决方案——JWT ,  json  web  token

jwt由三部分构成,头部、有效数据、签名,这部分数据很小,可以放在http协议的任何部位进行传输,服务端收到后可直接进行业务处理,无需查询缓存、数据库等,提高性能。

所以jwt最后的数据是这样的

xxxxx.yyyyy.zzzzz

1、header包含两部分内容

{
  "alg": "HS256",
  "typ": "JWT"
}

签名算法,和类型JWT

2、payload有效数据

{ "sub": "1234567890", "name": "John Doe", "admin": true }

3、签名

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

对header进行base64.payload进行base64,然后对整个串进行hmacsha256加密

最后的JWT就是三段base64编码中间通过.分开的一个字符串

服务端收到这串字符串,首先解密,验签,判断数据是否正确,走后续的逻辑

有的人可能认为JWT不够安全,因为payload会暴露有效数据,我个人认为,JWT的数据格式可以适当修改,其实无非就是放了个用户id,以及权限角色等信息,应该够了,为了提高安全性,可以每次都由服务端来返回这个JWT token,由前端下一次请求带过来验证,做到JWT token一次失效。

session JWT各有各的好处,酌情考虑。

猜你喜欢

转载自blog.csdn.net/chiweitree/article/details/83309327