版权声明:本文为博主原创文章,未经博主允许不得转载。 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各有各的好处,酌情考虑。