Django中的JWT
一、什么是JWT(Json Web Token)
顾名思义,JWT就是Json Web Token,是在web应用中基于json的一种身份验证机制。
本质上就是把用户的信息通过base64编码后,加上一个头和一个签名,然后当作身份令牌发放给用户,使其能够通过这个token进行身份验证。
二、与session对比的优缺点
2.1 优点
1、session的用户信息全都是存在服务器上的,如果用户过多,会导致内存上的问题,而token不会
2、token扩展性好,session只能存储服务器上已有的结构性数据,而token是json,所以存啥都行
3、token可以在一定程度上防止csrf(原理是同源页面每次发请求都在请求头或者参数中加入Cookie中读取的Token来完成验证。CSRF只能通过浏览器自己带上Cookie,不能操作Cookie来获取到Token并加到http请求的参数中)
4、JWT可以跨语言支持,反正传的都是json,通用性很强
2.2 缺点
1、东西存太多了的话,会越来越大,每此访问都带着token,甚至可能让请求变成大头娃娃~(请求头比请求体大很多)
2、由于JWT只要签名合法,就是合法的,所以无法从自身层面上废除token,需要增加额外的逻辑来实现注销的功能
3、每次都要进行验证运算,消耗运算资源较大
三、JWT的构成
JWT分为三部分头部(header)、有效载荷(payload)、签名(signature)
3.1 头部
没啥好说的,就是告诉别人这是JWT,加密方式是xxx,一般长这样:
{
'typ': 'JWT',