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编码
作用、用途
- token串使用base64编码
- 互联网中前后端交互
- 图片二进制可以使用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)