状态保持-JWT

news2025/4/19 16:27:47

 Web的状态保持技术 -JWT(Json Web Token)

    在分布式微服务技术流行的今天,大型网站对JWT的使用愈加频繁,相比较于传统的session cookie。

    HTTP 是一个无状态的协议,何为无状态呢?就是说这本次请求和上次请求是没有任何关系的。那么WEB在哪里会频繁应用它?登录某个网站的时候是不是就需要一直保持这一个对应登录用户的状态。显然HTTP不是实现它,传统的解决方法是cookie-Session,而目前流行还有JWT,主要就是一个可靠的认证授权处理。(cookie是session和JWT都需要使用的)

    绝大多数的网站都需要注册登录,常见的登录页面后端使用技术如:

springsecurity+JWT、Django+JWT等等。

JWT大致引介

    JWT由三部分构成:header、payload、signature。

    一个JWT的token长什么样子,如下表,根据“.”巧好分别分成三部分,也就是header、payload、signature。

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo4LCJ1c2VybmFtZSI6IjEyMzQ1IiwiZXhwIjoxNjY4ODcyNDAzLCJlbWFpbCI6IiJ9.Jdxf4gaD_dpMpYqnuoNtirLemnBm9f8Wz2hRlNGWaOA

    header:声明类型和加密算法;

    payload:(也称JWT载荷)存放有效信息的位置,包含三部分:标准中注册的声明、公有的声明、私有的声明;

    signature:JWT签证信息(base64加密后的header和payload连接组成的字符串,通过header中的加密方式进行加盐secret组合加密构成)

        一般思路是这样的,当用户登录成功,服务端生成jwt token,然后响应给客户端存起来。下一次发请求必须登录用户才能访问的话,客户端就需要将JWT通过请求头的方式发给后端(jwt凭证是存在客户端),后端拿到JWT token,对前两段利用密钥加密(因此得保护好这个密钥-secret私钥),如果得到的结果与前端传输过来的jwt传输结果相同(服务器就是生成token和校验的),说明没问题,请求将成功打入。

   

Django JWT

    这里针对是Django较新的版本2.x及之后,因为djangorestframework-jwt已经不支持Django1.x之后的版本(不维持版本更新了)。取而代之的是djangorestframework-simplejwt。

    进入DRF官网(django-rest-framework.org), Search jwt, 点djangorestframework-simplejwt。

    

    点击Simple JWT — Simple JWT 5.2.2.post1+gcc96fd6 documentation,点击django-rest-framework-jwt

   

    这里就可以看到指定版本:

    自行做demo测试:

(1)安装(pip或编译器)

pip install djangorestframework-simplejwt

(2)settings.py或dev.py配置jwt框架与Simple JWT

INSTALLED_APPS = [
    ...
    'rest_framework_simplejwt',  # jwt
]
​
REST_FRAMEWORK = {
    ...
    'DEFAULT_AUTHENTICATION_CLASSES': (
        # jwt配置
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}
​
SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=10),  # JWT有效期这里假定为10min
}

(3)app下的urls.py

urlpatterns = [
  ...
  url(r'^api/token/$', TokenObtainPairView.as_view(), name='token_obtain_pair'),     # JWT登录(内部认证代码还是Django,登录成功生成JWT)
  url(r'^api/token/refresh/$', TokenRefreshView.as_view(), name='token_refresh'),
  url(r'^api/token/verify/$', TokenVerifyView.as_view(), name='token_verify'),
]        

​【注:只是看到token的话最后两个url可以不写】

(4)访问localhost:8000/api/token(或者自行配置的域名和端口号)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【毕业设计】67-基于单片机的三相电压型SPWM逆变器控制设计及应用(仿真、原理图、源代码、低重复参考文档、答辩PPT、英文文献)

【毕业设计】67-基于单片机的三相电压型SPWM逆变器控制设计及应用(仿真、原理图、源代码、低重复参考文档、答辩PPT、英文文献) 文章目录【毕业设计】67-基于单片机的三相电压型SPWM逆变器控制设计及应用(仿真、原理图、源代码、低重复参考文…

网站文章采集器-万能文章采集器

随着时代的发展。互联网无时不刻地出现在我们的生活中,大家也越来越注重效率,今天小编就给大家来分享一款网站文章采集器。只需要点几下鼠标就能轻松获取数据,不管是导出本地还是发布到网上。网站人员可以实现自动采集,定时发布&a…

[计算机毕业设计]食品安全数据的关联分析模型的应用

前言 📅大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

idea里面完整创建maven项目(包含如何使用)

目录 前言: 1.Maven和Maven Archetype区别? 2.创建maven项目之前的步骤(必看) 一、创建maven 1.打开idea--->文件--->新建--->项目 2.新建项目--->自定义项目名称--->选择Maven-->创建 3. 创建成功 二、…

微信小程序连接蓝牙汉印HM-A300L标签打印机

需求: 参考文章: 微信小程序实现蓝牙打印 打印机CPCL编程参考手册(CPCL 语言) 蓝牙打印机CPCL编程手册~汉印HM-A300 无用小知识: A300系列:先将打印机关机然后装好纸,同时按住屏幕左右两边的按…

UDS诊断网络层ISO15765-2(CAN)

诊断协议那些事儿 本文为诊断协议那些事儿专栏文章,从一个 ECU 到另一个 ECU,或外部诊断设备和一个 ECU 之间的通信,不仅依赖前文介绍的诊断寻址方式,更需要关注数据的传输,依赖网络层、传输层协议去完成,…

[附源码]java毕业设计社团管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

2022.11.09第6次Javaweb上机——实现登录欢迎页面

前情回顾 Myeclipse的安装教程_科大云炬的博客-CSDN博客 【JavaWeb第1次上机练习】安装Tomcat并在本地浏览器成功运行第一个Hello world网站_科大云炬的博客-CSDN博客 【第2次JavaWeb上机练习】_科大云炬的博客-CSDN博客 第3次 JavaWeb上机练习:Servlet基础作业…

python工作任务流flow实时框架:prefect

python工作任务流flow实时框架:prefect prefect是一个python的工作任务流调度实时框架,prefect可以快速构建平台系统复杂模块间工作流的监测。当平台系统模块之间的调用链越来越复杂时候,任务执行起来,已经很难盘点清楚程序逻辑和…

删除链表中重复元素的问题

目录 一、删除所有重复元素,使每个元素只出现一次 1.1带头链表解法 1.2 递归方法 二、删除所有重复数字结点,只留下不同数字 2.1带头链表解法 2.2 递归方法 一、删除所有重复元素,使每个元素只出现一次 给定一个已排序的链表的头 hea…

Android App开发实战项目之模仿美图秀秀的抠图工具(附源码 简单易懂 可直接使用)

需要图片集和源码请点赞关注收藏后评论区留言~~~ 所谓抠图神器,就是从一副图片中扣出用户想要的某块区域 一、需求描述 美图的修图功能如此强大,离不开专业的图片加工技术,抠图便是其中重要的一项功能。在App界面底部点击抠图按钮&#xff…

mysql查询:行转列与列转行

目录 1. 行转列 1.1 什么是行转列 1.2 准备工作 1.3 行转列的实现原理 2. 列转行 2.1 什么是列转行 2.2 准备工作 2.3 列转行的实现原理 3. 总结 1. 行转列 1.1 什么是行转列 从表面理解,就是表里存储在行上的数据,在查询结果里展示在列上面。举…

基于stm32单片机随机数自动摇号抽奖系统

资料编号:099 下面是相关功能视频演示: 99-基于stm32单片机随机数自动摇号抽奖系统(源码仿真全套资料)采用stm32单片机作为主控,LCD1602显示,通过按键来重置生成随机数,类似于摇号和抽奖系统 …

如何实现广义的元交易(Meta Transaction)

在合约内启用元交易是一个强大的补充。要求用户持有ETH来支付Gas一直以来都是而且仍然是新用户进入的最大挑战之一。如果只是简单的点击,谁知道现在会有多少人在使用以太坊? 但有时,解决方案可以在你的合约中加入元交易能力。实现起来可能比你想象的要容易。 什么是元交易?…

(带你分分种学会linux的文件类型和软硬链接)linxu的文件类型(硬链接和软链接详解)

文章目录一,时区部分1,时区状态的展示2,列出所有时区二,linux的文件类型1,列出目录和文件类型2,查看文件类型和状态并且修改用户密码3,文件类型表4,文件的三次修改时间三,linux的软硬…

记录Manjaro Linux安装nvidia显卡驱动失败的经历

我的Manjaro: 2022.11.19的最新系统,通过manjaro-kde-21.3.7-220816-linux515.iso安装,然后通过pacman -Syyu更新的我的设备: CPU intel 12700H,大小核架构,使用系统默认的linux5.15内核会发现启动firefox浏览器的速度…

LeetCode 142. 环形链表 II

题目链接:https://leetcode.cn/problems/linked-list-cycle-ii/ 思路如下: 用两个指针 fast, slow 同时从起点开始走,fast 每次走两步,slow 每次走一步。 如果过程中 fast 走到 null,则说明不存在环。否则当 fast 和…

基于Python3.6配置开发环境

前言 最近在CTF上遇到了瓶颈,本人不会python,导致有些题做不出来。而且python的实用性实在太强了,所以就找了一个培训机构的课程边学习边实践。现将经验总结,分享给大家。 正文 1、配置python安装路径和环境变量 怎么下载pyth…

【Acwing】最短路+二分 通信线路

340. 通信线路 - AcWing题库 题意: 思路: 首先因为贪心,免费升级的肯定是最贵的那几根 因此这道题可以简化为: 给定一张图,求结点1到结点N的所有路径中第K1大的边权的最小值 可以发现我们要求剩下的边中最大值的最…

Qt程序打包成安装包exe

本章介绍把Qt开发的程序打包成安装包的方法,程序打包成install.exe,可双击安装,有默认安装路径,也可以选择安装目录,自动生成桌面快捷方式和开始菜单选项,可以在操作系统–>设置–>应用程序里看到&am…