DRF | 入门第九天 JWT

73 阅读1分钟

JWT的介绍和构成

前言:保持会话的发展历史:``` www.cnblogs.com/liuqingzhen…

### JWT的构成 --- 三部分

#### 头

一般放公司信息, 加密方式(不放秘钥)

#### 荷载

当前用户的信息:用户名、用户ID、token过期时间

#### 签名

第一部分和第二部分通过加密得到的字符串

### JWT的签发和认证

以后使用JWT,最核心的就是写这两个地方

#### 签发
    1. 登录接口,登录成功,签发token(三段式)
    2. header, 用base64编码,暂放{“company”:“公司信息”}
    3. payload,用base64编码,暂放{用户名,用户权限,过期时间}
    4. 使用加密方式:md5, 把header和payload都update进md5中,生成前面base64编码
    
    三段拼接起来,用  .   分割

#### 认证
    1. 用户携带token过来,认证
    2. 取出第一部分 header
    3. 取出第二部分 payload
    4. 使用之前同样的加密算法(密码)
    5. 用token的第三部分作比较,如果一样,表示没有被篡改,顺利继续往下走,返回两个值
    6. 如果被篡改,抛异常
    
### DRF-JWT的使用

可以自己写,也可以使用第三方

`-django-rest-framework-jwt` 有点老

`-django-rest-framework-simplejwt` 新的

#### django-rest-framework-jwt快速使用

下载:`pip3 install djangorestframework-jwt`


```python

from rest_framework_jwt.views import obtain_jwt_token  
  
urlpatterns = [path('login', obtain_jwt_token)]

authentication_classes = [JSONWebTokenAuthentication]

permission_classes = [IsAuthenticated]

Base64编码

作用、用途

  1. token串使用base64编码
  2. 互联网中前后端交互
  3. 图片二进制可以使用base64进行编码
import json, base64  

d = {"name":"狼哥", "pswd":"JJz123abc"}  
d_str = json.dumps(d)  
res = base64.b64encode(d_str.encode('utf-8'))  
print(res)  
# b'eyJuYW1lIjogIlx1NzJmY1x1NTRlNSIsICJwc3dkIjogIkpKejEyM2FiYyJ9'  

res1 = base64.b64decode(b'eyJuYW1lIjogIlx1NzJmY1x1NTRlNSIsICJwc3dkIjogIkpKejEyM2FiYyJ9')  
print(res1)