2024年回炉计划之JWT(五)

news2025/1/23 3:15:49

一、简介        

        WT(JSON Web Token)是一种用于在网络应用间安全地传递信息的开放标准(RFC 7519)。它是一种紧凑且自包含的方式,用于在各方之间传输信息作为 JSON 对象。JWT 可以通过数字签名(使用 HMAC 算法)或使用公钥/私钥对(RSA 或 ECDSA)进行验证,以保证信息的完整性和可信度。

JWT 由三部分组成,它们分别是:

  1. Header(头部):包含了两部分信息,声明类型(typ)和所使用的签名算法(alg),通常为 JSON 对象。
  2. Payload(载荷):包含了需要传递的信息,也是一个 JSON 对象,其中包含了一些预定义的声明,比如过期时间(exp)、发行者(iss)、接收者(aud)等,也可以包含一些自定义的声明。
  3. Signature(签名):由前两部分的编码信息与一个秘密密钥结合后经过签名算法生成。

JWT 的工作流程通常如下:

  1. 认证:用户提供其凭据,服务器验证凭据的有效性。
  2. 生成 Token:一旦验证通过,服务器生成一个 JWT 并将其返回给客户端。
  3. 存储 Token:客户端通常会将 JWT 存储在本地,例如在浏览器的 localStorage 中或者移动端的本地存储中。
  4. 发送 Token:客户端在每次与服务器进行通信时,都会将 JWT 发送给服务器,通常是通过 HTTP 请求的头部部分发送(通常是 Authorization 头)。
  5. 验证 Token:服务器收到 JWT 后,会验证其签名和有效期,以确保其合法性和有效性。
  6. 处理请求:如果验证通过,服务器会处理请求,并相应客户端请求。

二、签名过程详解

        JWT 的 Signature 部分是用于验证 JWT 的完整性和真实性的关键组成部分。它通过对 Header 和 Payload 的内容使用指定的加密算法并结合密钥生成的签名,确保了 JWT 在传输过程中没有被篡改。

Signature 部分的生成流程如下:

  1. 构造待签名的字符串:将 Base64 编码后的 Header 和 Payload 拼接成一个字符串,形如 base64UrlEncode(header) + '.' + base64UrlEncode(payload)
  2. 使用指定的算法进行签名:使用 Header 中指定的算法(通常是 HMAC SHA-256 或 RSA)对上述构造的字符串进行签名。对于 HMAC 算法,需要使用共享的密钥来进行签名;对于 RSA 算法,需要使用私钥来进行签名。
  3. Base64 编码签名结果:将签名结果进行 Base64 编码,得到最终的 Signature。

验证 JWT 时,接收方会根据相同的算法和密钥对收到的 JWT 进行解析,然后按照相同的步骤重新计算 Signature,最后比对计算得到的 Signature 是否与 JWT 中的 Signature 一致。如果一致,则说明 JWT 没有被篡改过,可以信任其中的信息。

需要注意的是,JWT 的 Header 中包含了算法的信息,因此验证方需要根据 Header 中指定的算法来选择相应的方法进行签名验证。同时,为了保证安全性,应该尽量避免将敏感信息存储在 JWT 中,因为虽然 JWT 的内容经过了 Base64 编码,但仍然可以通过解码还原出原始数据。

三、示例

        构成:header.payload.Signature

        示例:eyJ0eXBlIjoiand0IiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiJqaWtlMjUwc3ViamVjdCIsInVzZXJOYW1lIjoiaGhiYmVpamluZ0AxNjMuY29tIiwiaWF0IjoxNzA4MjIzMzk4LCJleHAiOjE3MDY1MjA0MzF9.2-SSAT5Fvt1tsDHWhf9CwT8rS9KgzRn-dxuqFimGlw4

        解析:JSON Web Tokens - jwt.io

        至于生成JWT的token与校验代码,不再赘述。

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

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

相关文章

Kafka(二)

第 4 章 Kafka Broker 4.1 Kafka Broker 工作流程 4.1.1 Zookeeper 存储的 Kafka 信息 (1)启动 Zookeeper 客户端。 bin/zkCli.sh (2)通过 ls 命令可以查看 kafka 相关信息。 ls /kafka 4.1.2 Kafka Broker 总体工作流程…

C++类和对象——继承详解

目录 1.基本语法 2.继承方式 3.继承中的对象模型 4.构造和构析顺序 5.同名成员处理 6.同名静态成员处理 7.多继承语法 8.菱形继承 图片示例&#xff1a; 虚继承 代码示例&#xff1a; 1.基本语法 #include<bits/stdc.h> using namespace std;//公共页面类 …

招募Sui大使,共同构建Sui社区,解锁专属福利

我们非常激动地宣布推出新一轮的Sui大使计划&#xff0c;这是围绕Sui创新技术构建全球社区的关键举措。 大使计划赋予了热衷于Sui使命并渴望在Sui社区和受众中传播意识的个人以权力。Sui大使体现了网络的价值观&#xff0c;并通过战略性和有影响力的行动加速了采用过程。我们很…

PFA洗气瓶配空气采样泵用PFA气体吸收瓶的特点

PFA洗气瓶是一种洗去气体中杂质的器皿&#xff0c;是将不纯气体通过选定的适宜液体介质鼓泡吸收&#xff08;溶解或由于发生化学反应&#xff09;&#xff0c;从而洗去杂质气体&#xff0c;以达净化气体的目的。在设计时&#xff0c;四氟球的周围都布满小孔。一般情况下&#x…

在字节划水的7年,太真实了。。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 测试这条路是坎坷的&#xff0c;我自己深有体会。 我们的起点低…

02_debugfsLinux内核模块

01_basicLinux内核模块-CSDN博客环境IDubuntuMakefilemodules:clean:basic.creturn 0;运行效果。https://blog.csdn.net/m0_37132481/article/details/136157384?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136157384%22%2C%…

分享一个学英语的网站

名字叫&#xff1a;公益大米网​​​​​​​ Freerice 这个网站是以做题的形式来记忆单词&#xff0c;题干是一个单词&#xff0c;给出4个选项&#xff0c;需要选出其中最接近题干单词的选项。 答对可以获得10粒大米&#xff0c;网站的创办者负责捐赠。如图 触发某些条件&a…

红队APT-钓鱼篇_邮件钓鱼_Ewomail系统_网页克隆

目录 演示案例:Ewomail&Swaks-邮件伪造发信人Ewomail-邮件系统-搭建&使用Ewomail&Gophish-邮件加网页钓鱼网页钓鱼-克隆修改-二维码用户劫持网页钓鱼-克隆修改-Flash升级后门上线 演示案例: Ewomail&Swaks-邮件伪造发信人 发邮件的邮箱地址如果能伪造的话&am…

windows安装Mysql解压版

windows安装Mysql解压版 一、下载mysql-8.0.36-winx64.zip二、解压三、配置3.1. 添加环境变量&#xff1a;新建MYSQL_HOME3.2.如何验证是否添加成功&#xff1a;必须以管理员身份启动3.3. 初始化MySQL&#xff1a;必须以管理员身份启动3.4. 注册MySQL服务&#xff1a;必须以管理…

python-自动化篇-办公-将PDF文件转存为图片

因工作中的某些奇葩要求&#xff0c;需要将PDF文件的每页内容转存成按顺序编号的图片。用第三方软件或者在线转换也可以&#xff0c;但批量操作还是Python方便&#xff0c;所谓搞定办公自动化&#xff0c;Python出山&#xff0c;一统天下&#xff1b;Python出征&#xff0c;寸草…

【测试运维】性能测试经验文档总结第3篇:VuGen详解(已分享,附代码)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论性能测试相关知识。入门阶段&#xff1a;认识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试)&#xff0c;常用性能测试指标-(吞吐量、并发数、响应时间、点击数...)&#xff0c;性能测试工具选择。性能脚本&…

【STM32】软件SPI读写W25Q64芯片

目录 W25Q64模块 W25Q64芯片简介 硬件电路 W25Q64框图 Flash操作注意事项 状态寄存器 ​编辑 指令集 INSTRUCTIONS​编辑 ​编辑 SPI读写W25Q64代码 硬件接线图 MySPI.c MySPI.h W25Q64 W25Q64.c W25Q64.h main.c 测试 SPI通信&#xff08;W25Q64芯片简介&am…

IT行业高含金量证书全解析:开启职业生涯新篇章

在快速发展的IT行业&#xff0c;持续学习和专业认证是提升个人竞争力的重要途径。全球范围内存在着众多的IT认证&#xff0c;它们不仅能够验证你的技术能力&#xff0c;还能在求职和职业晋升中起到关键作用。 本篇博客将深入探讨IT行业中部分高含金量的证书&#xff0c;包括中…

探索设计模式的魅力:掌握命令模式-解锁软件设计的‘遥控器’

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 引言&#xff1a;探索命令模式的奥秘 软件设计领域充满挑战与机遇&#xff0c;命令模式…

MyBatis--08--分页插件PageHelper

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.分页插件PageHelper1.1 mysql中 limit 关键字含义1.2 PageHelper 官网https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md](ht…

C++学习Day05之函数调用运算符重载

目录 一、程序及输出二、分析与总结 一、程序及输出 #include<iostream> using namespace std; #include <string>class MyPrint { public:void operator()(string text){cout << text"运算符重载" << endl;} };void MyPrint2(string str) …

海外媒体发稿:8个提升影响力的日韩地区媒体发稿推广策略-华媒舍

在今天的数字化时代&#xff0c;媒体发稿推广成为企业和个人增加影响力的重要方式。特别是在日韩地区&#xff0c;这个拥有庞大媒体市场和活跃社交媒体用户的地区&#xff0c;正确的推广策略将对影响力的提升起到关键作用。我们将介绍8个提升影响力的日韩地区媒体发稿推广策略。…

C++智能指针的知识!

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 大家好呀&#xff0c;我是PingdiGuo_guo&#xff0c;今天我们来学习一下智能指针。 文章目录 1.智能指针的概念 2.智能指针的思想 3.智能指针的作用 3.1 自动内存管理 3.2 共享所有权 3.3 避免悬挂指针…

Linux第58步_备份busybox生成rootfs根文件系统

备份busybox生成rootfs根文件系统 打开终端 输入“ls回车” 输入“cd linux/回车” 输入“ls回车”&#xff0c;产看“linux”目录下的文件和文件夹 输入“cd nfs/回车”&#xff0c;切换到“nfs”目录 输入“ls回车”&#xff0c;产看“nfs”目录下的文件和文件夹 输入…

软件实例分享,台球厅收费系统电脑桌球店计时软件及灯控线路图教程

软件实例分享&#xff0c;台球厅收费系统电脑桌球店计时软件及灯控线路图教程 一、前言 以下软件程序教程以 佳易王桌球室计时计费软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、每个桌子对应的有 开台时间&#xff0c;所用的时…