JWT的快速使用
jwt的签发和认证
保证安全
签发--登陆过程:
1、用基本信息公司信息存储json字典,采用base64算法得到 头字符串
2、用关键信息存储json字典,采用base64算法得到 荷载字符串,过期时间,用户id,用户名
3、用头、体加密字符串通过加密算法+秘钥加密得到 签名字符串,拼接成token返回给前台
如果没有第三方模块帮助我们做,我们就自己做
认证---访问需要登陆的接口
1、将token按 . 拆分为三段字符串,第一段 头加密字符串 一般不需要做任何处理
2、第二段 体加密字符串,要反解出用户主键,通过主键从User表中就能得到登录用户,过期时间是安全信息,确保token没过期
3、再用 第一段 + 第二段 + 加密方式和秘钥得到一个加密串,与第三段 签名字符串 进行比较,通过后才能代表第二段校验得到的user对象就是合法的登录用户
Django中的快速使用JWT
Django中的两个JWT
1、django-rest-framework-jwt
地址:https://github.com/jpadilla/django-rest-framework-jwt
2、django-rest-framework-simplejwt
地址:https://github.com/jazzband/djangorestframework-simplejwt
Django中快速使用
1、签发
第一步:
pip3 install djangorestframework-jwt
第二步:在路由中配置
from rest_framework_jwt.views import obtain_jwt_token urlpatterns = [ path('login/', obtain_jwt_token), ]
第三步:使用接口测试工具发送post请求到后端,就能基于auth的user表签发token
2、认证
在视图类中配置:认证类+权限类
from rest_framework_jwt.authentication import JSONWebTokenAuthentication from rest_framework.permissions import IsAuthenticated class BookView(GenericViewSet,ListModelMixin): # JSONWebTokenAuthentication :rest_framework_jwt模块写的认证类 authentication_classes = [JSONWebTokenAuthentication,] # 需要配合一个权限类 permission_classes = [IsAuthenticated,]
JWT定制返回格式
第一步:写一个函数--->返回什么格式,前端就能看到什么格式
def jwt_response_payload_handler(token, user=None, request=None): return { 'code': 100, 'msg': "登陆成功", 'token': token, 'username': user.username }
第二步:在配置文件中配置
# jwt模块的配置文件,统一放在JWT_AUTH JWT_AUTH = { 'JWT_RESPONSE_PAYLOAD_HANDLER': 'app01.utils.jwt_response_payload_handler', }