Django JWT验证

news/2024/11/25 13:50:52/

什么是JSON Web Token(JWT)?

JSON Web Token,简称JWT,是一种开放标准(RFC 7519),用于在网络上传输信息,特别是在身份验证和授权方面。JWT是一串编码后的JSON格式字符串,它由三个部分组成:头部(Header)、负载(Payload)和签名(Signature)。

Header

头部包含了两个部分:令牌类型(即JWT)和哈希算法(例如HMAC SHA256或RSA)。它使用Base64编码。

Payload

负载包含了要传输的数据,例如用户ID、角色、访问权限等。它也使用Base64编码。

Signature

签名是JWT的第三部分,它使用头部和负载中的数据以及一个密钥来生成。它用于验证消息的完整性和验证发送方的身份。它也使用Base64编码。

整个JWT看起来像这样:xxxxx.yyyyy.zzzzz

Django JWT验证

在Django中,我们可以使用第三方库djangorestframework-jwt来实现JWT的验证。

安装

我们首先需要安装djangorestframework-jwt库。可以通过以下命令进行安装:

pip install djangorestframework-jwt

配置

settings.py文件中添加以下内容:

REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework_jwt.authentication.JSONWebTokenAuthentication',),
}JWT_AUTH = {'JWT_SECRET_KEY': SECRET_KEY,'JWT_ALGORITHM': 'HS256','JWT_ALLOW_REFRESH': True,'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=30),
}

这里需要注意的是,JWT_SECRET_KEY是必须的,它用于生成签名。如果没有指定,则默认从Django的SECRET_KEY中获取。JWT_EXPIRATION_DELTA指定了JWT的过期时间,这里设置为7天。JWT_REFRESH_EXPIRATION_DELTA指定了JWT的刷新时间,这里设置为30天。

创建Token

要创建JWT,我们需要调用jwt_encode_handler

from rest_framework_jwt.utils import jwt_encode_handlerpayload = {'user_id': user.id,'username': user.username,
}jwt_token = jwt_encode_handler(payload)

这里的payload包含了我们要传输的数据,例如用户ID和用户名。

验证Token

在视图中,我们可以使用@jwt_authentication_classes装饰器来验证JWT:

from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response@api_view(['GET'])
@authentication_classes([JSONWebTokenAuthentication])
@permission_classes([IsAuthenticated])
def my_view(request):content = {'message': 'Hello, World!'}return Response(content)

这里的@authentication_classes([JSONWebTokenAuthentication])@permission_classes([IsAuthenticated])是必须的,它们用于验证JWT并确定用户是否已通过身份验证。

刷新Token

如果JWT已过期,我们可以使用jwt_refresh_handler来刷新它:

from rest_framework_jwt.utils import jwt_refresh_handlernew_jwt_token = jwt_refresh_handler(jwt_token)

这里的jwt_token是我们之前生成的JWT,new_jwt_token是刷新后的JWT。

总结

Django JWT验证是一种安全的身份验证方法,通过使用djangorestframework-jwt库,我们可以轻松地实现JWT的创建、验证和刷新。


http://www.ppmy.cn/news/95449.html

相关文章

C++数据结构:Python风格双向链表Pylist的实现

文章目录 前言一、目的二、代码详解1、Node类模板2、Pylist类构造3、内嵌迭代器4、Python风格insert方法5、Python风格append方法6、Python风格[]下标操作方法7、Python风格、 方法8、Python风格pop方法9、Python风格remove方法10、length、get方法 三、使用示例总结原创文章&a…

什么是web3 | 区块链web3.0人才

文章目录 一、Web31. 什么是web3?2. web3的dapp架构 二、区块链web3.0人才1. 区块链开发技术栈2. 欧易对人才的要求3. 如何成为一名合格的智能合约高级工程师4. web3各个赛道5. 链上数据分析师6. 一些案例 三、参考 一、Web3 1. 什么是web3? 20世纪90年…

Ubuntu下ESP-IDF的环境搭建

目录 1. 前期准备2. 安装ESP-IDF和esp-tools3. 下载子模块和工具链4. 编译HelloWorld工程 1. 前期准备 更新源 sudo apt-get update –y安装相关依赖 sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache lib…

调用华为API实现身份证识别

调用华为API实现身份证识别 1、作者介绍2、调用华为API实现身份证识别2.1 算法介绍2.1.1OCR简介2.1.2身份证识别原理2.1.3身份证识别应用场景 2.2 调用华为API流程 3、代码实现3.1安装相关的包3.2代码复现3.3实验结果 1、作者介绍 雷千龙,男,西安工程大…

JavaScript 进阶 (一)

目录 作用域 局部作用域 函数作用域 块作用域 全局作用域 作用域链 JS垃圾回收机制 闭包 变量提升 函数进阶 函数提升 函数参数 箭头函数 基本语法 箭头函数参数 箭头函数this 解构赋值 数组解构 对象解构 遍历数组 forEach 方法(重点) …

C语言之网络编程(必背知识点)

一、认识网络 1、网络发展史 网络的来历_百度知道 ARPnetA--Internet--移动互联网--物联网 2、局域网和广域网 局域网(LAN) 局域网的缩写是LAN,local area network,顾名思义,是个本地的网络,只能实现小范围…

Linux:环境变量

否则就不会输出: 这只能临时生效,一旦重启linux后就会消失: 针对用户生效,在文件中的最后写上export 变量名变量值: 打开文件: 输入命令(保存):source .bashrc 因为是正对用户设置的变量&#…

高级Java多线程面试题及回答

高级Java多线程面试题及回答 1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? 这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可…