drf jwt 认证
JWT是什么(Json Web Token)
JWT 是一个开放标准(RFC 7519),它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名。它具备两个特点:
简洁(Compact)
- 可以通过URL, POST 参数或者在 HTTP header 发送,因为数据量小,传输速度快
自包含(Self-contained)
- 负载中包含了所有用户所需要的信息,避免了多次查询数据库
这篇文章https://www.jianshu.com/p/180a870a308a原理讲的很清楚。
我这就不讲过多原理,直接讲如何使用
安装JWT
# settings.py
(python36env) [vagrant@localhost ~]$ pip install djangorestframework-jwt
Looking in indexes: http://pypi.douban.com/simple
Collecting djangorestframework-jwtDownloading http://pypi.doubanio.com/packages/2b/cf/b3932ad3261d6332284152a00c3e3a275a653692d318acc6b2e9cf6a1ce3/djangorestframework_jwt-1.11.0-py2.py3-none-any.whl
Collecting PyJWT<2.0.0,>=1.5.2 (from djangorestframework-jwt)Downloading http://pypi.doubanio.com/packages/93/d1/3378cc8184a6524dc92993090ee8b4c03847c567e298305d6cf86987e005/PyJWT-1.6.4-py2.py3-none-any.whl
Installing collected packages: PyJWT, djangorestframework-jwt
Successfully installed PyJWT-1.6.4 djangorestframework-jwt-1.11.0
修改settings.py文件
INSTALLED_APPS = [...'rest_framework','rest_framework.authtoken', # 设置token...
]
REST_FRAMEWORK = {...# 添加JWT全局认证'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework_jwt.authentication.JSONWebTokenAuthentication',),}
# 自定义token过期时间
import datetime
JWT_AUTH = {'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=86400),
}
# 还有很多其他相关设置,可以查阅相关文档
修改序列化文件
# serializers.py
from rest_framework import serializers
from django.contrib.auth.models import Group
class UserGroupsSerializer(serializers.ModelSerializer):"""用户组序列化类"""class Meta:model = Groupfields = "__all__"
修改视图文件
# views.py
from django.contrib.auth.models import Group
from rest_framework.permissions import IsAuthenticated
from .serializers import UserGroupsSerializer
class UserGropInfoViewset(viewsets.ModelViewSet):permission_classes = (IsAuthenticated,)queryset = Group.objects.all()serializer_class = UserGroupsSerializer
修改路由文件
# 当前app下的router.py
from rest_framework.routers import DefaultRouter
from .views import UserGropInfoViewset
group_router = DefaultRouter()group_router.register('GroupsInfo',UserGropInfoViewset,base_name='GroupsInfo')# 全局url.py
from rest_framework.routers import DefaultRouter
route = DefaultRouter()
from users.router import group_router
route.registry.extend(group_router.registry)# 配置jwt路由
from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [url(r'^', include(route.urls)),url(r'^api-auth',include('rest_framework.urls',namespace='rest_framework')),# 使用jwt验证url(r'^api-token-auth/', obtain_jwt_token),
测试
# 获取JWT token
(python36env) [vagrant@localhost ~]$ curl -X POST -d "username=admin&password=123456" http://localhost:8000/api-tok
en-auth/
{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTMyMjI2NDYwLCJlbWFpbCI6ImFkbWluQGFkbWluLmNvbSJ9.Ow9qZQ8AszS0RnY7ZU6F-AKmUDgBet9uLgmYbWYTJzo"}# 使用token 获取数据
(python36env) [vagrant@localhost ~]$ curl -H "Authorization: JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo
yLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTMyMjI2NDYwLCJlbWFpbCI6ImFkbWluQGFkbWluLmNvbSJ9.Ow9qZQ8AszS0RnY7ZU6F-AKmUDgBet9uL
gmYbWYTJzo" http://localhost:8000/users/ | python -m json.tool% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 666 100 666 0 0 8983 0 --:--:-- --:--:-- --:--:-- 9123
{"count": 79,"next": "http://localhost:8000/users/?page=2","previous": null,"results": [{"id": 1,"username": "eric","email": ""},{"id": 2,"username": "admin","email": "admin@admin.com"},{"id": 3,"username": "panda-1","email": "panda-1@qq.com"},{"id": 4,"username": "panda-2","email": "panda-2@qq.com"},{"id": 5,"username": "panda-3","email": "panda-3@qq.com"},{"id": 6,"username": "panda-4","email": "panda-4@qq.com"},{"id": 7,"username": "panda-5","email": "panda-5@qq.com"},{"id": 8,"username": "panda-6","email": "panda-6@qq.com"},{"id": 9,"username": "panda-7","email": "panda-7@qq.com"},{"id": 10,"username": "panda-8","email": "panda-8@qq.com"}]}
drf jwt 认证相关推荐
- 6.DRF IP限次访问JWT认证RBAC权限缓存
文章目录 0. 准备环境 1. 自定义频率限制 1.1 SimpleRateThrottle源码 1.2 SimpleRateThrottle使用 1.3 自定义模块 2. API接口文档 3. JW ...
- DRF访问控制(RBAC)、JWT认证
目录 RBAC 什么是RBAC Django的内置RBAC(六表) 表关系 实操 登录admin操作 admin二次开发 base64编码与解码 JWT认证 为什么使用JWT 认证? Session机 ...
- django值jwt认证提示身份认证信息未提供
django值jwt认证提示身份认证信息未提供 具体提示如下: drf {"detail":"身份认证信息未提供."} 原因(一般第二种的可能性较大) 第一种: ...
- jwt 私钥_一分钟带你了解JWT认证
一.JWT简介 JSON Web Token(JWT)是一个开放的标准(RFC 7519),它定义了一个紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息.由于此信息是经过数字签名的,因 ...
- Asp.net Core认证和授权:JWT认证和授权
JWT验证一般用户移动端,因为它不像cookie验证那样,没有授权跳转到登陆页面 JWT是json web token的简称,在 jwt.io 网址可以看到 新建一个API项目,通过postman ...
- Spring Security 实战:使用 JWT 认证访问接口
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 欢迎阅读Spring Security 实战 ...
- python实现后台系统的JWT认证
介绍一种适用于restful+json的API认证方法,这个方法是基于jwt,并且加入了一些从oauth2.0借鉴的改良. 1. 常见的几种实现认证的方法 首先要明白,认证和鉴权是不同的.认证是判定用 ...
- python费用结算系统_python 全栈开发,Day104(DRF用户认证,结算中心,django-redis)
考试第二部分:MySQL数据库 6. MySQL中char和varchar的区别(1分) char是定长,varchar是变长. char的查询速度比varchar要快. View Code 7. ...
- 如何简单的在 ASP.NET Core 中集成 JWT 认证?
前情提要:ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统 文章超长预警(1万字以上),不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包 自上一 ...
最新文章
- 基于STM8H1K08的ISP HUB控制器
- SpringBoot项目新建之后修改编译版本
- TCPview 介绍
- 求一个二维整数数组最大子数组之和,时间复杂度为N^2
- python路径拼接os.path.join()函数和os.makedirs的用法
- Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
- python通过链接下载文件-如何使用Python通过HTTP下载文件?
- 他与她,一个两年前的故事
- centos下MySQL Workbench连接时崩溃的解决方法
- [工具] multidesk
- 服务器debian系统重置,如何重置Debian 10系统的root登录密码
- audit linux mysql_MySQL审计工具Audit Plugin安装使用
- 编程语言学习概要与学习方法
- 交换机access接口
- web前端面试题之肉(css)
- AlexNet论文翻译(中英文对照版)-ImageNet Classification with Deep Convolutional Neural Networks
- c#怎么在github上快速找到相关的开源项目
- jmeter学习指南之察看结果树,你知道都有哪些功能吗
- 香港4月1日5G商用,月费198港元起
- 洪君:base64图片文件上传转MultipartFile文件、王君:java、springboot 君子:洪君
热门文章
- DNS域名解析服务器
- 深度学习调参:优化算法,优化器optimizer,学习率learning rate
- 深度学习_目标检测_Soft-MNS详解
- 文本框 html 哪些属性,html常见标签和属性
- 姿态估计入门-2020综述《The Progress of Human Pose Estimation: A Survey and Taxonomy of Models Applied in 2D》
- 老子《道德经》第六十三章
- 计算机人脸识别算哪个专业,人脸识别属于计算机什么领域
- 基于Uni-APP多端「h5+小程序+App」高仿抖音小视频|直播|聊天实例
- Windows上安装MySQL数据库(完整版)
- 实现二进制数到十进制的转换#