jwt基础
目录1 jwt介绍和原理
cook session token 发展史
JWT全称: json web token(JWT) 就是web方向token的使用
JWT的构成三部分 每部分用 . 分隔
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
第一部分: header 头
声明类型,这里是JWT
声明加密的算法 通常直接使用HMAC SHA256
公司信息....
第二部分: payload 荷载
存放有效信息的地方
过期时间
签发时间
用户id
用户名字
第三部分: signature, 签名
第一部分和第二部分通过密钥+加密方式(HAMC SHA256)得到
jwt开发重点
登录接口---> 签发token
认证类-->jwt认证
base64编码和解码
import base64
import json
dic = {'user_id':1 ,'username':'wei'}
dic_str = json.dumps(dic)
# 把这个字符串使用base64编码
res = base64.64encode(dic_str.encode('utf-8'))
print res
# 注意 :base64编码后, 字符长度一定是4的倍数,如果不是,使用 = 补齐 = 不表示数据
# 解码
res = base64.b64decode('TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ=')
print(res)
bas464应用场景
- jwt 使用了base64
- 网络中传输数据,也会经常使用 base64编码
- 网络传输中有的图片 使用base64编码
drf-jwt快速使用
django+drf平台开发jwt这套东西,有两个模块
djangorestframework-jwt–>虽然年久失修,官网不支持django4.x了但是其中底层实现原理都是一样的
djangorestframework-simplejwt---》公司用的多
自己封装jwt签发和认证
使用步骤
-
安装
-
快速签发token->登录接口,路由配置
使用django,user表实现快速认证
path('login/', obtain_jwt_token)
-
postman测试
向http://127.0.0.1:8000/login/发送post请求,携带username和password
定制返回格式
以后如果基于auth的User标签token,就可以自己不写,但是登录接口返回格式,只有token,不符合公司规范
使用步骤
1.写个函数jwt_response_payload_handler
def jwt_response_payload_handler(token, user=None, request=None):
return {
'code': 100,
'msg': '登录成功',
'username': user.username,
'token':token
}
2.配置项目配置 新建utils.py
JWT_AUTH = {
'JWT_RESPONSE_PAYLOAD_HANDLER':'app01.utils.jwt_response_payload_handle'
}
3.使用postman测试就可以看到自定义的返回了
jwt认证类
以后接口要登录后才能访问使用
-
在视图类上加一个认证类, 一个权限类class
from rest_framework_jwt.authentication import JSONWebTokenAuthentication class BookViewDetail(GenericViewSet, RetrieveAPIView): authentication_classes = [JSONWebTokenAuthentication]
-
postman测试
请求体中key值叫Authorization
请求头的value值是:jwt有效的token 中间有空格