一、全称:Json Web Token。啊
二、原理
1、三段式组成:头、体、签名(head.payload.sgin)。
2、三段信息加密前都是json格式字符串。
2、头和体都一般采用base64可逆算法加密,用于信息的存取。
3、签名一般采用md5不可逆算法加密,保证了整个token信息的安全性。
4、头中一般包含,项目信息,签名的加密方式等,相同固定的信息。例如,{"project": "项目1", "type": "md5",}。
5、体中一般包含,用户唯一标识信息,用户端设备信息,过期时间等,每个用户独特的信息。例如,{"id": "001", "over_time": "60*60*24*14",}。
6、签名是将,头和体的加密结果加上安全码组合,再整体进行加密。例如,{"head": "xxxxxx", "payload": "yyyyyy", "secret_key": "zzzzzz"}。
三、校验步骤
1、将token字符串拆成三段。
2、第一段因为一般是固定的信息,所以通常不做任何处理。
3、第二段反解出字典格式,从中通过用户唯一标识信息定位登录用户,设备信息确保登录来源可靠,过期时间确保登录时效。
4、将第一段和第二段字符串加上安全码,再组合,用同一方式加密与第三段字符串对比校验,若通过,则认为该登录用户为合法对象。
四、drf项目的jwt认证流程
1、当客户端访问登录接口,登录通过后调用token签发算法,得到token信息返回给客户端,客户端自己保存于本地,比如浏览器的cookies中。
2、校验token信息的逻辑应该写在认证器类中,在需要认证的视图中通过配置了认证器校验执行token认证。
3、token认证通过后,则会将此用户注入request.user中,后续视图代码中则可以调用到登录用户信息了。
4、若全局配置了认证器类和权限类,应至少在登录接口禁用。
五、安装JWT:pip install djangorestframework-jwt。