使用Simple JWT提供认证服务(详细介绍access_token和refresh_token的使用)

文章目录

    • 基本概念
      • JSON Web Token(JWT)
      • Simple JWT
    • 主要用途
    • Cookie、Session、Token的区别
      • Cookie
      • Session
      • Token
    • Token续签
    • access_token 和 refresh_token时效设置

基本概念

JSON Web Token(JWT)

JSON Web Token(JWT),又称为JSON令牌,是一种用于在网络应用之间安全地传输信息的开放标准(RFC 7519)。

  • 它采用了一种紧凑的、自包含的方式来表示信息,通常用于身份验证和授权。
  • JWT的设计目标是确保信息的完整性和安全性,同时具备易于使用和传输的特点。

Simple JWT

Simple JWT为Django REST框架提供了一个JSON Web Token身份验证后端

主要用途

  • 提供身份鉴别认证
  • 标识用户登陆状态

Cookie、Session、Token的区别

Cookie

一开始HTTP是无状态的,用户访问完Web网站浏览完就无任何连接
随着用户需求的提升和技术的发展,用户希望以交互的形式进行网站访问,例如发表评论,记录生活,便出现Cookie的技术。

  • Cookie是一个保存在客户机中的简单的文本文件, 这个文件与特定的 Web 文档关联在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用。

以购物为例子
用户添加商品到购物车时,浏览器像服务器发送请求,服务器会查找到此商品到id并存储在Cooike中返回。浏览器将接收到的Cooike存储在本地,当下一次访问时会继续携带Cooike请求服务器。

但是随着购物车商品越来越多,请求的Cookie越来越多,请求压力也越大。同时我们会发现Cookie存放的信息本身就是服务器提供的,服务器本身有,我们为什么还要多才发送相同的数据?

Session

为了解决Cookie带来的问题,便出现出现了存储在服务器的Session

  1. 用户每次登陆,Session为其分配一个唯一的 sessionId,我们可以查到使用这个 sessionId的用户。而sessionId我们通过cookie返回给用户。
  2. 当后续再添加商品时我们通过携带的 sessionId的便可以知道是哪一个用户需要的商品

但是随着用户的增多,一台服务器不能满足我们的日常所需,我们会新增服务器,但是此时出现的问题是Session存储在哪个服务器,不能很好的支持分布式

Token

Token不存储在服务器端,所以无需考虑多台服务器Token的同步问题。
用户信息存储在Token中,我们每次只需要携带Token请求服务端我们就可以知道是哪个用户。
但是Token有效期不是永久的,当过期之后用户便无法通过认证,我们需要获取新的Token

Token在有效期内我们可以认为用户是登陆状态,当Token失效后我们就需要用户重新登录

Token续签

延长Token过期时间有两种方案

  1. access_token
  2. refresh_token

首次登陆
在这里插入图片描述
后续登陆
在这里插入图片描述
当 access_token 过期时,需要通过 refresh_token 来刷新,拿到新的 access_token 和 refresh_token

我们已经有了access_token便可以通过认证,为什么还需要refresh_token 呢?

我们只有输入账号密码通过验证之后才可以拿到access_token,access_token失效我们还需要再次输入账号密码重新登陆
但是有了refresh_token,我们就可以直接识别用户,无需再次输入账号密码便可以获取access_token

实际业务中,假设我们设置的access_token为1天,用户1天内无需输入密码,如果用户只使用1次后续很长一段时间不在使用,我们把这个用户标识为非活跃用户,后续某天再次使用系统需要重新登陆密码。如果用户在access_token有效的1天内每个一段时间访问,我们标识为活跃用户,当第二天token失效重新登陆密码会影响用户体验,此时我们如果使用refresh_token自动刷新用户就无需输入账号密码。

access_token 和 refresh_token的时效就需要设置不一致,当短的access_token 时效过了之后,发送时效长的 refresh_token 重新获取一个短时效access_token。
如果都过期,就需要重新登录了。

总结
活跃用户token失效不能让其跳转登陆界面
非活跃用户token失效需要跳转登陆界面

access_token 和 refresh_token时效设置

为了保证能够刷新活跃用户的access_token , refresh_token 的有效时间不能小于用户活跃时间点
一般,refresh_token 的有效时间 > 2 * access_token 的有效时间

比如,access_token 实效7天,那么 refresh_token 实效可以给15天,也可以给30天

我们每次请求需要携带access_token,但是我们不能每次请求前通过接口获取access_token,我们可以将首次获取的access_token存储,定期通过refresh_token刷新。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 自动化测试框架unittest与pytest的区别!

引言 这篇文章主要讲unittest与pytest的区别,pytest相对unittest而言,代码简洁,使用便捷灵活,并且插件很丰富。 Unittest vs Pytest 主要从用例编写规则、用例的前置和后置、参数化、断言、用例执行、失败重运行和报告这几个方面…

从手动操作到自动化管理,如何实现企业身份业务全面自动化?

在数字化时代,身份管理已经成为了企业和组织不可或缺的一部分,企业对于管理员工、客户和合作伙伴的身份信息和访问权限的需求变得愈发复杂。身份管理不仅仅是一项必要的任务,更是确保业务流畅运营和数据安全的关键因素。然而,传统…

ESP32C3 LuatOS TM1650②动态显示累加整数

--注意:因使用了sys.wait()所有api需要在协程中使用 -- 用法实例 PROJECT "ESP32C3_TM1650" VERSION "1.0.0" _G.sys require("sys") local tm1650 require "tm1650"-- 拆分整数,并把最低位数存放在数组最大索引处 loc…

冒泡排序、插入排序、选择排序和快速排序的原理

下面是对冒泡排序、插入排序、选择排序和快速排序的原理的简要解释: 冒泡排序(Bubble Sort):冒泡排序是一种简单的排序算法。它通过多次迭代比较相邻的元素,并交换它们的位置,使得较大(或较小&…

中间件安全-CVE复现IISApacheTomcatNginx漏洞复现

目录 中间件安全&CVE复现&IIS&Apache&Tomcat&Nginx漏洞复现中间件-IIS安全问题中间件-Nginx安全问题漏洞复现Nginx 解析漏洞复现Nginx 文件名逻辑漏洞 中间件-Apache-RCE&目录遍历&文件解析等安全问题漏洞复现漏洞复现CVE_2021_42013 RCE代码执行&…

python二次开发Solidworks:读取立方体的高度

在SW中新建一个零件文档,建立一个立方体,长度和宽度自定义,高度100mm,下面通过python实现读取该立方体的高度: import win32com.client as win32 import pythoncomswApp win32.Dispatch(sldworks.application) swApp.…

kafka、zookeeper、flink测试环境、docker

1、kafka环境单点 根据官网版本说明(3.6.0)发布,zookeeper依旧在使用状态,预期在4.0.0大版本的时候彻底抛弃zookeeper使用KRaft(Apache Kafka)官方并给出了zk迁移KR的文档 2、使用docker启动单点kafka 1、首先将kafka启动命令,存储为.servi…

选择最佳的项目管理工具:推荐哪一个?

项目管理工具推荐哪个?Zoho Projects项目管理工具为各类团队提供卓越的项目管理解决方案。 1、全面管理各类团队项目 Zoho Projects是一款全面的项目管理工具,具备简化工作流程和提高团队生产力的功能。无论是软件开发与DevOps,还是人力资源与…

Elasticsearch学习笔记

1.核心概念 bucket: 一个数据分组(类似于sql group by以后的数据)metric:对bucket执行的某种聚合分析的操作,比如说求平均值,最大值,最小值。一些系列的统计方法(类似 select count(1) MAX MIN AVG) 请…

后台交互-首页->与后台数据进行交互,wsx的使用

与后台数据进行交互wsx的使用 1.与后台数据进行交互 // index.js // 获取应用实例 const app getApp() const apirequire("../../config/app.js") const utilrequire("../../utils/util.js") Page({data: {imgSrcs:[{"img": "https://cd…

三辊闸机的应用领域和特点

三辊闸机是一种常用于门禁控制的设备,它具有以下应用和优点: 应用: 门禁控制:三辊闸机可以用于各种场合的门禁控制,如小区、写字楼、学校、医院等。考勤管理:三辊闸机可以与考勤系统集成,用于…

【数据结构】算法的时间复杂度和空间复杂度

目录 1. 什么是数据结构? 2.什么是算法? 3.算法效率 4.时间复杂度 4.1时间复杂度的概念 4.2大O的渐进表示法 4.3常见时间复杂度计算举例 4.3.1冒泡排序: 4.3.2二分查找: 4.3.3递归阶乘 4.3.4斐波那契数列 4.4例题&…

Elasticsearch实践:ELK+Kafka+Beats对日志收集平台的实现

可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个全文搜索引擎,它还提供了分布式的多用户能力,实时的分析,以及对复杂搜索语句的处理能力,使其在众多场景下,如企业搜索,日志和事件数据分析等…

stable diffusion和midjourney哪个好

midjourney和stable diffusion哪个好?midjourney和stable diffusion的区别?那么今天就从这2款软件入手,来探索一下他们的功能的各项区别吧,让你选择更适合你的一款ai软件。 截至目前,我们目睹了生成式人工智能工具的在…

复杂的菱形继承及菱形虚拟继承(详解)

复杂的菱形继承及菱形虚拟继承 复杂的菱形继承及菱形虚拟继承虚拟继承解决数据冗余和二义性的原理笔试面试题 复杂的菱形继承及菱形虚拟继承 单继承:一个子类只有一个直接父类时称这个继承关系为单继承 多继承:一个子类有两个或以上直接父类时称这个继…

Leetcode—2525.根据规则将箱子分类【简单】

2023每日刷题(五) Leetcode—2525.根据规则将箱子分类 实现代码 char * categorizeBox(int length, int width, int height, int mass){long long volume;long long len (long long)length;long long wid (long long)width;long long heig (long lo…

ssrf漏洞学习

目录 ssrf漏洞 相关函数 相关协议 file协议 dict协议 gopher协议 ctfshow ssrf web351 web352 web353 web354过滤01 web355五位长度 web356 三位长度 web357 DNS重定向 web358 正则 ssrf漏洞 SSRF(Server-Side Request Forgery,服务器端请…

搭建伪分布式Hadoop

文章目录 一、Hadoop部署模式(一)独立模式(二)伪分布式模式(三)完全分布式模式 二、搭建伪分布式Hadoop(一)登录虚拟机(二)上传安装包(三&#xf…

(矩阵) 289. 生命游戏 ——【Leetcode每日一题】

❓ 289. 生命游戏 难度:中等 根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一…

C++类对象所占内存空间大小分析

前言 类占内存空间是只类实例化后占用内存空间的大小,类本身是不会占内存空间的。用 sizeof 计算类的大小时,实际上是计算该类实例化后对象的大小。空类占用1字节原因:C要求每个实例在内存中都有一个唯一地址,为了达到这个目的&am…