JWT详解解读读

news2025/4/6 16:27:20

📑前言

本文主要是jwt解读文章,如果有什么需要改进的地方还请大佬指出⛺️

🎬作者简介:大家好,我是青衿🥇
☁️博客首页:CSDN主页放风讲故事
🌄每日一句:努力一点,优秀一点

在这里插入图片描述

目录

文章目录

  • 📑前言
  • **目录**
    • 1、什么是jwt及其用法?
    • 2. JWT 的数据结构
      • 2.1 Header
      • 2.2 Payload(负载)
      • 2.3 Signature(签名)
    • 3.基于Token的身份认证与基于服务器的身份认证
    • 4.实际开发中的应用
  • 📑文章末尾


1、什么是jwt及其用法?

什么是JWT?JWT,全称Json Web Token,是一种基于json的开发标准,是token的一种具体实现方式。本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token,并且这个JWT token带有签名信息,接收后可以校验是否被篡改,所以可以用于在各方之间安全地将信息作为Json对象传输。

JWT官网有一张图描述了JWT的认证过程:

在这里插入图片描述

2. JWT 的数据结构

JWT 的三个组成部分依次如下
· Header(头部)
· Payload(负载)
· Signature(签名)

2.1 Header

Header 部分是一个 JSON 对象,描述 JWT 的元数据,通常是下面的样子。
在这里插入图片描述

头部:表明是一个jwt类型的token,采取的加密方式是HS256

2.2 Payload(负载)

Payload 部分也是一个 JSON 对象,用来存放实际需要传递的数据。JWT 规定了7个官方字段,供选用。

iss (issuer):签发人
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):编号

2.3 Signature(签名)

签名哈希部分是对上面两部分数据签名,需要使用base64编码后的header和payload数据,通过指定的算法生成哈希,以确保数据不会被篡改。首先,需要指定一个密钥(secret)。该密码仅仅为保存在服务器中,并且不能向用户公开。然后,使用header中指定的签名算法(默认情况下为HMACSHA256)根据以下公式生成签名

在这里插入图片描述

H M A C S H A 256 ( b a s e 64 U r l E n c o d e ( h e a d e r ) + " . " + b a s e 64 U r l E n c o d e ( p a y l o a d ) , s e c r e t ) HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret)

在计算出签名哈希后,JWT头,有效载荷和签名哈希的三个部分组合成一个字符串,每个部分用.分隔,就构成整个JWT对象

3.基于Token的身份认证与基于服务器的身份认证

在讨论基于Token的身份认证是如何工作的以及它的好处之前,我们先来看一下以前我们是怎么做的:
HTTP协议是无状态的,也就是说,如果我们已经认证了一个用户,那么他下一次请求的时候,服务器不知道我是谁,我们必须再次认证
传统的做法是将已经认证过的用户信息存储在服务器上,比如Session。用户下次请求的时候带着SessionID,然后服务器以此检查用户是否认证过。
使用 JWT 的优势:
你不需要向传统的 Web 应用那样将用户状态保存于 Session 中。

4.实际开发中的应用

在实际的SpringBoot项目中,一般我们可以用如下流程做登录:
1.在登录验证通过后,给用户生成一个对应的随机token(注意这个token不是指jwt,可以用uuid等算法生成),然后将这个token作为key的一部分,用户信息作为value存入Redis,并设置过期时间,这个过期时间就是登录失效的时间
2.将第1步中生成的随机token作为JWT的payload生成JWT字符串返回给前端
3.前端之后每次请求都在请求头中的Authorization字段中携带JWT字符串
4.后端定义一个拦截器,每次收到前端请求时,都先从请求头中的Authorization字段中取出JWT字符串并进行验证,验证通过后解析出payload中的随机token,然后再用这个随机token得到key,从Redis中获取用户信息,如果能获取到就说明用户已经登录

📑文章末尾

在这里插入图片描述

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

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

相关文章

计算机毕业设计选题推荐-跑腿平台微信小程序/安卓APP-项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

【Java】HashSet集合用法

目录 HashSet 集合特点 示例代码 手写HashSet集合 HashSet 没有Get() HashSet 集合特点 HashSet 基于HashMap 来实现的,是一个不允许有重复元素的集合HashSet 允许有 null 值HashSet 是无序的,即不会记录插入的顺序HashSet集合实现了Set接口HashSet …

07 MIT线性代数-求解Ax=0:主变量,特解 pivot variables, special solutions

前面定义了矩阵的列空间和零空间,那么如何求得这些子空间呢? 1. 计算零空间 Nullspace A的零空间即满足Ax0的所有x构成的向量空间 对于矩阵A进行“行操作”并不会改变Axb的解,因此也不会改变零空间 unchanged 第一步消元: echelon 阶梯型 …

《进化的力量》摘抄

作者:刘润 不是最强壮的,也不是最聪明的,而是最适合的才能生存。 序言 1、成功,一定是因为我们做对了什么。物竞天择,适者生存。但是,面对“天择”逻辑的复杂性,我们其实并不知道什么是对的。…

名人问题(分类讨论),士兵问题(找规律)

【名人问题】n个人中的名人是指这样一个人:他不认识别人,但是每个人都认识他。任务就是找出这样一个名人,但只能通过询问“你认识他/她吗?”这种问是来完成。设计一个高效算法,找出该名人或者确定这群人中没有名人。你的算法在最坏情况下需要…

nginx 进程模型

文章目录 nginx运行模式与进程模式进程模式流程图默认初始化运行模式与进程模式(宏展开)cpu_affinity多CPU绑定合理性判定Nginx的daemon创建(os/unix/ngx_daemon.c)运行模式、进程模式启动 多进程模式下master处理流程设置进程信号、初始化信号掩码、屏蔽…

『第十一章』数据持久化:CoreData 与 CloudKit

在本篇博文中,您将学到如下内容: 1. 苹果“元老”数据库 CoreData 简介2. CoreData 组成要素3. NSPersistentContainer 对象4. 将 CoreData 集成到项目中5. CoreData 基本操作:增删改查(CRUD)5.1 新建5.2 删除5.3 查询和更新6. CoreData 与 SwiftUI7. 用泛型精简瓶颈代码8. …

多元系的热力学基本方程

多元系:含有两种或两种以上的化学组分的系统 欧勒定理 齐函数成立的充要条件: 多元系的热力学函数 如果系统有K个组元:任何广延量(V, U, S)都是其广延变量的一次齐函数 任何强度量都是其广延变量的零次齐函数 全部选择广延量变量时 由齐函…

UWB室内定位技术

室内定位系统方案中,UWB室内定位技术目前应用较多,得益于UWB室内定位10-30厘米的超高定位精度。 UWB全称是超宽带技术,它是一种无线载波通信技术。 UWB不采用载波,而是利用纳秒至微微秒级的非正弦波窄脉冲传输数据。 目前根据使用…

腾讯云轻量应用服务器地域北京、上海和广州怎么选择比较好?

腾讯云轻量应用服务器地域是指轻量服务器数据中心所在的地理位置,如上海、广州和北京等地域,如何选择地域?腾讯云百科txybk.com建议地域选择遵循就近原则,用户距离轻量服务器地域越近,网络延迟越低,速度就越…

DAMNets

方法 体会 实验充分,不愧是ICLR,但作者未提供代码

代码审计-锐捷EG易网关 管理员账号密码泄露漏洞

出现漏洞的文件在 /login.php 审查源码我们发现通过命令拼接的方式构造命令执行 发送请求包,拼接 CLI指令 show webmaster user /login.php usernameadmin&passwordadmin?showwebmasteruser漏洞证明: 文笔生疏,措辞浅薄,望…

GO学习之 通道(nil Channel妙用)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…

网络设备远程登录和管理-双厂商

✍ 设备开局都要做哪些配置? ✍ 思科华为的配置命令有什么区别? ✍ 实战演示不同操作系统的配置; -- 本地设备调试 - console接口配置 -- 远程设备管理 - telnet 不加密 | ssh 加密的 -- web界面调试 - 补充的作用 -- SD…

idea中Run/Debug Python项目报错 Argument for @NotNull parameter ‘module‘ of ...

idea中Run/Debug Python项目报错 Argument for NotNull parameter module of ... idea中运行Python项目main.py时报错: Error running main: Argument for NotNull parameter module of com/intellij/openapi/roots/ModuleRootManager.getInstance must not be nu…

电脑提示由于找不到vcruntime140.dll文件,教你四个解决方案

本文将介绍vcruntime140.dll文件的定义、作用以及丢失的原因,并提供四个解决方案来解决这个问题。 首先,让我们来了解一下vcruntime140.dll文件是什么。vcruntime140.dll是Microsoft Visual C Redistributable Package的一部分,它是运行使用…

从0到1之微信小程序快速入门(基础知识)

目录 JSON 配置文件 WXML 模板 WXSS 样式 JS 逻辑交互 微信小程序中,每个页面由4 个基本文件组成,它们分别是:js文件(页面的脚本文件,存放页面的数据、事件处理函数等)、json文件(当前页面的配置文件,配置窗口的外…

【C++的OpenCV】第十四课-OpenCV基础强化(二):访问单通道Mat中的值之at()、ptr()、iscontinuous()

🎉🎉🎉 欢 迎 各 位 来 到 小 白 p i a o 的 学 习 空 间 ! \color{red}{欢迎各位来到小白piao的学习空间!} 欢迎各位来到小白piao的学习空间!🎉🎉🎉 💖&…

Python——新建工程/引入本地库

文章目录 前言一、创建项目及文件二、之前创建项目未勾选Inherit global site-packages三、缺少第三方库报错pywpswin32commarkupsafe前言 PyCharm是一种Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其…

【论文解读】单目3D目标检测 LPCG(ECCV 2022)

本文分享单目3D目标检测,LPCG模型的论文解读,了解它的设计思路,论文核心观点,模型结构,以及效果和性能。 目录 一、LPCG 简介 二、论文核心观点 三、思路框架 四、核心观点——单目3D目标检测的标签中,…