DRF之JWT简介
一:认证规则图#
(1)Django前后端不分离#
(2)DRF分离#
二:认证规则演变图#
(1)数据库session认证#
PS:
(1)验证低效率
(2)当有大量的用户存储在数据库中 查表会很慢
(2)缓存认证#
PS:在缓存中有I/O操作
(3)JWT认证#
(4)缓存认证 不易并发#
(5)缓存认证 易并发#
三:JWT简介#
(1)作用#
(1)服务端产生token 传输给客户端 服务端不需要保存token减小服务端压力
(2)服务端存储的是签发和认证的两端算法
(3)算法完成各集群服务器同步成本低,路由项目完成集群部署(适应高并发)
(2)格式#
(1)采用三段式格式 头部 + 载荷 + 签名
(2)每一部分都是一个json字典加密之后形成的字符串
(3)头部 + 载荷 实验bases64位加密算法 该算法可逆
(4)签名采用hash256 不可逆
(5)格式内容
(1)头部:基础信息 ---> 公司名称 项目组信息等等
(2)载荷:有用但是非隐私信息 --- > 用户公开信息 过期时间等
(3)签名:头部 + 载荷 + 秘钥 不可逆算法
(6)签发token:
(1)头部可逆算法加密 ---> 固定头部信息加密
(2)载荷可逆算法加密 ---> 当前用户 过期时间加密
(3)签名不可逆算法 ---> 头部 + 载荷 + 秘钥生成不可逆加密
(7)校验token:
(1)头部校验可选
(2)载荷校验用户与过期时间
(3)签名检验 头部 + 载荷 + 秘钥检验token是否被篡改
(3)使用安装#
(1)官网
https://github.com/jpadilla/django-rest-framework-jwt
(2)安装
pip3 install djangorestframework-jwt
(3)签发token
# 两者签发token方式是相同的 from rest_framework_jwt.views import ObtainJSONWebToken,obtain_jwt_token urlpatterns = [ url(r'^login/$', ObtainJSONWebToken.as_view()), url(r'^login/$', obtain_jwt_token) ]
PS:
(1)此时get方法不被允许
(2)只有post会被允许
(4)验证信息输入与结果
{ "username":"admin", "password":"admin123" } PS: "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTcxNzUzODY5LCJlbWFpbCI6IiJ9.rkI5BYdq9HFmIIW0Z8H7zb1g-XA4SYSy_RY5DKbuupM"
PS:
(1)数据错误不会反会信息
(2)每次发送token都会改变
(5)认证校验token
# 路由层 url(r'^test_token/$', views.Login.as_view()),
# 视图层 # 只有登录且通过认证的用户才可以访问
from rest_framework_jwt.authentication import JSONWebTokenAuthentication # 查看是否通过认证
from rest_framework.permissions import IsAuthenticated # 用户必须登录
class Login(APIView): permission_classes = [IsAuthenticated] # 局部验证用户必须登录 authentication_classes = [JSONWebTokenAuthentication] # 局部检验token def get(self,request,*args,**kwargs): return Response({ 'status':0, 'msg':'测试成功', 'results':request.user.username })
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!