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

news2024/10/6 16:16:51

文章目录

    • 基本概念
      • 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.coloradmin.cn/o/1118413.html

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

相关文章

探索大数据时代的关键技术:数据挖掘、可视化和数据仓库

文章目录 🌟 大数据和数据分析技术🍊 引言🍊 数据挖掘🍊 数据可视化🍊 数据仓库🍊 结论 📕我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里…

【Linux基础】详谈Shell运行原理------王婆传媒(高重复率面试题)

目录 💧前言 💦Shell的运行原理 👉Shell的基本概念与作用 👉原理的展示与剖析 👉Shell外壳感性理解【一门亲事】 💧总结 💧共勉 💧前言 在之前的 Linux 讲解中,主要说…

【管理运筹学】第 10 章 | 排队论(2,到达时间间隔的分布和服务时间的分布)

文章目录 引言一、普阿松分布二、负指数分布三、爱尔朗分布 引言 解决排队问题,首先要根据原始资料做出顾客到达时间间隔和服务时间的经验分布,然后按照统计学的方法(如 χ 2 \chi^2 χ2 检验)以确定属于哪种分布理论&#xff0…

JS数组方法合集(含应用场景)

1.Array.push() 向数组的末尾添加一个或多个元素,并返回新的数组长度。原数组改变 const arr ["apple", "orange", "grape"]; const arr_length arr.push("banana");console.log("arr", arr, "arr_leng…

JOSEF约瑟 JHOK-ZBM1;JHOK-ZBL1多档切换式漏电(剩余)继电器 面板导轨安装

系列型号: JHOK-ZBL多档切换式漏电(剩余)继电器(导轨) JHOK-ZBL1多档切换式漏电(剩余)继电器 JHOK-ZBL2多档切换式漏电(剩余)继电器 JHOK-ZBM多档切换式漏电&#xf…

【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【动态规划】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…

springBoot--web--favicon规则

在静态资源目录中找favicon.icon 推荐图标工具 favicon使用 在静态资源中放入下载好的图片,改名为favicon.ico

互联网医院|互联网医疗模式已从概念走向实体建设阶段

近年来,医疗服务领域新形态不断涌现,“互联网医疗”作为其中突出的一种,在挂号结算、远程诊疗、咨询服务等方面进行了不少探索,而早在2015年全国互联网医院成立,标志着“互联网医疗”模式已经从概念走向了实体建设阶段…

【Arduino TFT】Arduino uzlib库,用于解压gzip流,解析和风天气返回数据

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-10-21 ❤️❤️ 本篇更新记录 2023-10-21 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝&#x1f64…

开源WAF--Safeline(雷池)测试手册

长亭科技—雷池(SafeLine)社区版 官方网站:长亭雷池 WAF 社区版 (chaitin.cn) WAF 工作在应用层,对基于 HTTP/HTTPS 协议的 Web 系统有着更好的防护效果,使其免于受到黑客的攻击 1.1 雷池的搭建 1.1.1 配置需求 操作系统:Linux 指令架构&am…

【框架源码篇 03】Spring源码手写篇-手写AOP

Spring源码手写篇-手写AOP 手写IoC和DI后已经实现的类图结构。 一、AOP分析 1.AOP是什么? AOP[Aspect Oriented Programming] 面向切面编程,在不改变类的代码的情况下,对类方法进行功能的增强。 2.我们要做什么? 我们需要在前面手写IoC&…

[Spring] SpringBoot2 简介(一)—— 基础配置

目录 一、SpringBoot 简介 1、Spring 的缺点 2、SpringBoot 功能 二、SpringBoot 入门案例 1、实现步骤 2、访问服务器 3、入门小结 4、Idea 快速构建 SpringBoot 工程 5、起步依赖无需版本号 6、主启动类的在项目中的位置(*重要*) 三、Sprin…

[AUTOSAR][诊断管理][$10] 会话模式控制

文章目录 一、简介二、指令格式请求: 10 SF会话参数记录有P2Server_max(2byte)和P2*Server_max(2byte),高位在前的表示方式。否定相应:7F SID NRC(否定相应码)三、示例代码(1) uds10_session_ctl.c一、简介 $10服务是Diagnostic Session Control诊断会话控制,子功能有01…

机器学习 | Python决策树算法

基本原理 决策树的基本原理是将数据分成不同的子集,使每个子集尽可能纯净。 这意味着子集中的数据属于同一类别或具有相似的属性。 为了做到这一点,决策树会选择一个特征,并根据该特征将数据分成两个子集。 它会选择那个特征,该特征在划分后的子集中具有最好的纯度,通…

Python获取微信公众号文章数据

这是一个通过 Python mitmproxy 库 实现获取某个微信公众号下全部文章数据的解决方案。首先需要创建一个 Python 虚拟环境,并进入虚拟环境下: $ python -m venv venv $ venv/Scripts/activate我们需要使用 mitmproxy 库 来建立一个网络代理,…

设计模式篇---组合模式

文章目录 概念结构实例总结 概念 组合模式:组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。 当我们开发中遇到树形结构的业务时,可以考虑使用组合模式。(我也没有想明白为啥…

基于springboot实现财务管理系统项目【项目源码+论文说明】

基于springboot实现财务管理系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生&#x…

Ubuntu的EFI分区无法删除

本文解决的问题:双系统装完后需要删除ubuntu的分区,但是EFI系统分区无法删除。 第一步:cmd中输入命令 diskpart 并回车,如图中①; 第二步:在弹出窗口②中依次输入如下命令即可删除EFI分区; /…

基于springboot实现藏区特产销售平台项目【项目源码+论文说明】

基于springboot实现藏区特产销售管理平台演示 摘要 “互联网”的战略实施后,很多行业的信息化水平都有了很大的提升。但是目前很多藏区特产销售信息仍是通过人工管理的方式进行,需要在各个岗位投入大量的人力进行很多重复性工作,使得对人力物…

USRP-2944 配件讲解,如何选择对应的配件

USRP-2944 产品图片 产品官网价格信息 查看附件和价格 硬件服务 NI硬件服务计划通过简化物流,延长正常运行时间以及根据业界标准维护数据的可追溯性,帮助您节省系统组装、设置和维护所需的时间和金钱。这些计划涵盖多年期维修服务,同时还提…