当前位置: 首页 > news >正文

JWT一篇通

JWT 是什么?

JWT(JSON Web Token)是一种开放的标准,标准的编号是RFC7591。用于在不同实体之间安全地传输信息。它是基于 JSON 编码的令牌。

JWT 的组成

JWT由三个部分组成:头部(Header)、载荷(Payload)和签名(Signature)。

  1. 头部(Header)包含了令牌的类型(typ)和所使用的签名算法(alg),通常使用 Base64 编码表示。示例如下:
{"alg": "HS256","typ": "JWT"
}
  1. 载荷(Payload)是令牌的主要信息存储部分,包含了各种声明(claims),用于表示关于实体(用户、设备或其他主体)和其他补充数据的信息。载荷可以包含标准声明(例如:iss,sub,exp,nbf,iat,aud 等),也可以包含自定义声明。载荷同样会被进行 Base64 编码表示,并传输在令牌中。示例如下:
{"sub": "myapp","name": "oscar","role": "admin"
}
  1. 签名(Signature)是使用密钥对头部和载荷进行签名的哈希值,以确保令牌不会被篡改。签名通常使用头部中指定的算法(例如:HMAC、RSA 等)和密钥来生成,并以字符串形式附加在令牌的末尾。签名验证可以用于验证令牌的完整性和真实性。

以Java语言产生JWT的过程来看,步骤如下:

  1. 产生头部的Base64编码串
String header = "{\"alg\":\"HS256\",\"typ\":\"JWT\"}";
String encodedHeader = Base64.getEncoder().encodeToString(header.getBytes());
  1. 产生载体的Base64编码串
		String payload = "{\"sub\":\"myapp\",\"name\":\"oscar\"}";String encodedPayload = Base64.getEncoder().encodeToString(payload.getBytes());
  1. 使用点号. 连接头部和载体之后, 再使用签名算法进行签名, 将签名后的内容附加在整个字符串的后面
		Key secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256);String concatenated = encodedHeader + '.' + encodedPayload;Mac sha256_HMAC = Mac.getInstance("HmacSHA256");sha256_HMAC.init(secretKey);byte[] signature = sha256_HMAC.doFinal(concatenated.getBytes("utf-8"));String compact = concatenated + '.' + Base64.getEncoder().encodeToString(signature);

产生后得到的完整字符串如下:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJteWFwcCIsIm5hbWUiOiJvc2NhciJ9.5z6NoiF7MR999wOPn2NU6HnyPODx66qm5yRT+n8pNHs=

通过 https://base64.us/ 解码之后获取的内容如下图:
在这里插入图片描述

从上面可以看出, JWT的令牌就是一串字符串。

JWT 的作用

JWT 适用于在网络请求中传输身份验证和授权信息,常用于构建无状态(stateless)的身份验证和访问控制机制。客户端在接收到令牌后,可以通过对令牌进行解码和验证来验证其有效性,并使用其中的信息进行授权和身份验证。

总结起来,JWT 是一种使用 JSON 编码的安全令牌,由头部、载荷和签名部分组成,可用于在实体之间传递信息和验证身份。它提供了一种简单、可扩展和自包含的机制,用于处理身份验证和授权相关的任务。
JWT也经常用于单点登录, 就是用户登录A系统之后,产生一个令牌, 之后访问其他系统都带上这个 Token,进而可以访问B,C,D等系统。

JWT优缺点

  1. 基于JSON,方便解析
  2. 可以在令牌中定义丰富的内容,易于扩展
  3. 通过非对称加密和数字签名,防篡改,安全性高
  4. 资源服务使用JWT就可以完成授权,不需要依赖授权服务器

缺点:

  • JWT令牌较长, 占用较多的存储空间。

JWT的加密解密

JWT 的加密和解密通常涉及到以下三个步骤:

  1. 创建 JWT:
    创建 JWT 需要准备三个部分:头部(Header)、载荷(Payload)和签名(Signature)。在创建 JWT 时,首先将头部和载荷进行 Base64 编码,并将这两个编码后的字符串用点号连接起来形成 JWT 的第一部分。接着,使用密钥和指定的签名算法对前面的字符串进行签名,生成签名字符串,并与前面的字符串用点号连接起来形成 JWT 的最终形式。

  2. 验证 JWT:
    验证 JWT 的过程通常包括以下几个步骤:首先,对 JWT 中的头部和载荷部分进行Base64解码,提取其所包含的信息。接下来,用与创建 JWT 相同的算法和密钥,对头部和载荷部分计算签名。最后,将计算得出的签名字符串与 JWT 中的签名部分进行比较。如果两者相等,则表明 JWT 未被篡改过,可以被信任。

  3. 解码 JWT:
    如果需要查看 JWT 中包含的数据,可以对 JWT 的第一部分进行 Base64 解码,以得到头部和载荷的信息。解码后的结果通常为 JSON 格式的字符串,可以通过相应的 JSON 解析库将其转换为对象。

需要注意的是,JWT 中的头部和载荷信息并没有加密,只进行了 Base64 编码。因此,这些信息可以被轻易地获取。为了保护数据的机密性,通常会使用加密算法加密载荷部分,即将其转换为 JWE(JSON Web Encryption)格式。JWE 提供了一种标准化的加密方式,以保护 JWT 中的敏感信息。加密 JWE 包括头部、密钥和加密后的密文等部分,需要使用相应的算法和密钥来进行解密。

总的来说,JWT 的加密和解密通常包括创建 JWT、验证 JWT 和解码 JWT 等步骤。其中,验证 JWT 可以用于验证 JWT 是否被篡改过,以保证 JWT 的完整性和可信度。而将载荷部分加密则可以保护 JWT 中的敏感信息,提高 JWT 的机密性。



相关文章:

JWT一篇通

JWT 是什么? JWT(JSON Web Token)是一种开放的标准,标准的编号是RFC7591。用于在不同实体之间安全地传输信息。它是基于 JSON 编码的令牌。 JWT 的组成 JWT由三个部分组成:头部(Header)、载荷…...

【2023-09-01】vue中自定义按钮设置disabled属性后,异常触发click事件

vue中自定义按钮设置disabled属性后,异常触发click事件 项目中自定义按钮,使用a标签实现。设置disabled属性后,点击可以触发click事件。 由于各种原因,项目中并未使用成熟的第三方组件库,例如element-ui,a…...

nginx报错file not found解决

文章目录 一、nginx配置文件修改1.1 配置文件位置1.2 php fastcgi配置1.3 测试 二、nginxphp运行原理三、外网访问内网设置 采用nginxphp作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如…...

【力扣】96. 不同的二叉搜索树 <动态规划>

【力扣】96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出:5 示例 2: 输入&am…...

Win11搭建 Elasticsearch 7 集群(一)

一: ES与JDK版本匹配一览表 elasticsearch从7.0开始默认安装了java运行环境,以便在没有安装java运行环境的机器上运行。如果配置了环境变量JAVA_HOME,则elasticsearh启动时会使用JAVA_HOME作为java路径,否则使用elasticsearch根目…...

哭了,python自动化办公,终于支持 Mac下载了

想了解更多精彩内容,快来关注程序员晚枫 大家好,这里是程序员晚枫,小红薯/小破站也叫这个名。 在我的主页发布的免费课程:给小白的《50讲Python自动化办公》,一直在更新中,昨晚12点多,有朋友在…...

【已更新建模代码】2023数学建模国赛B题matlab代码--多波束测线问题

一、 问题重述 1.1问题背景 海洋测深是测定水体深度与海底地形的重要任务,有两种主要技术:单波束测 深与多波束测深。单波束适用于简单任务,但多波束可提供更精确的地形数据。多 波束系统的关键在于覆盖宽度与重叠率的设计,以确保…...

GMSL技术让汽车数据传输更为高效(转)

目前,大部分车企都在其旗舰车型上配备了达到Level 2水平的自动驾驶技术,也就是高级自动驾驶辅助 ADAS系统。ADAS系统硬件主要由以下几部分组成,包括传感器、串行器、解串器、ADAS处理器等。 除了ADAS系统,包括传感器融合、音视频影…...

ARM+Codesys标准通用型控制器

整机工业级设计,通讯外设经过隔离保护 电源宽电压设计(9~36V DC ) 丰富的通讯接口,满足多种场合控制和通讯需求 四核工业级处理器,高性能,低功耗,高可靠性 机身无风扇设计,外壳小巧 搭载内核 100% 自主…...

YOLOV8从零搭建一套目标检测系统(修改model结构必看)附一份工业缺陷检测数据集

目录 1.YOLOV8介绍 2.YOLOV8安装 2.1环境配置 3.数据集准备 1.YOLOV8介绍 Yolov8结构图: YoloV8相对于YoloV5的改进点: Replace the C3 module with the C2f module. Replace the first 6x6 Conv with 3x3 Conv in the Backbone. Delete two Convs …...

Maven 的其它插件

文章目录 Maven 的其它插件dockerfile 插件Apache Maven Checkstyle Pluginp3c-pmd Maven 的其它插件 dockerfile 插件 dockerfile-maven-plugin 是 spotify 公司新提供的、用以替代 docker-maven-plugin 的插件,它同样是用于在 maven 中将当前项目打成一个 docke…...

系列十三、Java操作RocketMQ之带Key的消息

一、概述 RocketMQ中的消息,默认会有一个messageId当做消息的唯一标识,我们也可以给消息携带一个key,用作唯一标识或者业务标识,包括在控制面板(Dashboard,RocketMQ的一个可视化面板)中也可以使…...

C#调用Dapper

1-查询数据 string sql “查询语句”; using (SqlConnection con new SqlConnection(数据库连接信息)) { List<表结构实体类> list con.Query<表结构实体类>(sql).ToList(); } 2-执行sql string sql “UPDATE table1 SET column1 Name where id id”; using…...

2023高教杯数学建模1:ABC题目+初步想法

2023 ABC题目初步想法 写在最前面A题&#xff1a;定日镜场的优化设计问题1&#xff1a;建模将其抽象为数学公式问题2&#xff1a;固定部分参数&#xff0c;约束条件下的局部最优化问题可尝试方法 问题3&#xff1a;约束条件下的局部最优化问题附录&#xff1a;相关计算公式参考…...

ApachePulsar原理解析与应用实践(学习笔记一)

随着时代的发展&#xff0c;软件设计的理念也在不断发展&#xff0c;从单体服务、面向服务、微服务&#xff0c;发展到云原生以及无服务。其演变的过程是一个能力不断增强&#xff0c;领域边界不断微分细化的过程。比如无服务就是将函数作为服务&#xff0c;就类似dns模式的服务…...

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书南京财经大学图书馆

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书南京财经大学图书馆...

qt 信号与槽机制,登录界面跳转

登录界面跳转 配置文件 .pro QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # d…...

uniapp的两个跳转方式

uniapp内置多种跳转方式&#xff0c;我这里介绍两个最常用的跳转&#xff0c;uni.navigateTo和uni.switchTab&#xff0c;前者为跳转到非TabBar页面&#xff0c;后者为跳转到TabBar页面&#xff0c;所谓TabBar就是底部导航栏配置的页面&#xff0c;例如下方的index.vue。 在pa…...

【LeetCode】1654:到家的最少跳跃次数的解题思路 关于力扣无法return的BUG的讨论

文章目录 一、题目二、题解与代码三、神奇的BUG3.1 无法执行的 return 和 break 语句3.2 通过另一个 break 解决 一、题目 有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发&#xff0c;到达它的家。 跳蚤跳跃的规则如下&#xff1a; 它可以 往前 跳恰好 a 个位…...

Calico IP In IP模拟组网

Calico IP In IP模拟组网 网络架构 模拟组网 先在k8s-master-1节点执行如下命令&#xff1a; # 创建veth-pair设备对ip link add veth1 type veth peer name eth0# 创建ns1网络命名空间ip netns add ns1# 将eth0网卡插入ns1网络命名空间ip link set eth0 netns ns1# 为ns1网…...

手把手教你用BES AUDIO_DUMP抓取蓝牙耳机通话AEC前后音频(附AU播放教程)

蓝牙耳机AEC算法调试实战&#xff1a;从数据抓取到效果验证全流程 在嵌入式音频开发领域&#xff0c;通话降噪&#xff08;AEC&#xff09;算法的效果验证一直是工程师面临的痛点。传统调试方法往往依赖主观听感或简单波形对比&#xff0c;难以精准定位问题。本文将基于BES2500…...

别再死记硬背ELMo、GPT、BERT的区别了!一张图带你搞懂它们的核心差异与适用场景

一图胜千言&#xff1a;ELMo、GPT、BERT技术差异与实战选型指南 刚接触NLP时&#xff0c;我也曾被各种预训练模型绕得头晕眼花——它们看起来都能处理文本&#xff0c;但面试官一问"为什么用BERT不用GPT"就瞬间语塞。直到我把这些模型拆解成汽车零件&#xff0c;才真…...

2026年5月19日:谷歌云误停账户致Railway全平台服务中断8小时

事件报告&#xff1a;2026年5月19日 - GCP账户暂停Chandrika Khanduri 与 Cody De Arkland于2026年5月20日发布此报告。据悉&#xff0c;本报告反映了发布时所掌握的信息&#xff0c;可能会根据谷歌云&#xff08;Google Cloud&#xff09;的内部审查结果进行更新。影响2026年5…...

Codesys ST语言实战:手把手教你读写XML配置文件(附完整工程源码)

Codesys ST语言实战&#xff1a;工业级XML配置文件读写全解析 在工业自动化领域&#xff0c;设备参数配置与数据交换一直是工程师们面临的日常挑战。想象一下这样的场景&#xff1a;深夜的生产线上&#xff0c;一台关键设备突然需要更新200多个工艺参数&#xff0c;而传统的HMI…...

城市网格化治理平台

在快速城市化的今天&#xff0c;传统的“治安维护”模式已经远远不够。如何利用有限的治理资源&#xff0c;最大化地覆盖城市的每一个角落&#xff1f;答案就在于网格化。所谓网格化治理&#xff0c;即将城市空间划分为若干个均匀的“网格”&#xff0c;每一个网格都有明确的边…...

告别混乱!在C#/C++混合项目中用OpenCasCade 7.7.0搞定三维坐标显示(附完整代码)

工业级三维坐标可视化实战&#xff1a;OpenCasCade混合开发深度解析 第一次在CAD软件中看到那个小小的三色坐标轴时&#xff0c;我完全没意识到它背后隐藏着如此复杂的工程逻辑。直到自己动手在C#/C混合环境中实现OpenCasCade的坐标显示系统&#xff0c;才真正理解工业级三维可…...

减 10 斤 vs 瘦 10 斤,别再被体重秤骗了!

外行看体重&#xff0c;内行看体脂。 减重 10 斤&#xff0c;你掉的可能只是水分、肌肉、肠道废物&#xff0c;身材看着没变化。 瘦 10 斤&#xff08;减脂&#xff09;&#xff0c;才是真正减掉脂肪组织&#xff0c;身材会明显小一圈&#xff0c;腰围、腿围肉眼可见地缩小。 这…...

用NE555和立创EDA做个会‘叮咚’的门铃:从原理图到PCB打板的完整DIY记录

从零打造NE555叮咚门铃&#xff1a;立创EDA全流程实战指南 当电子爱好者第一次尝试将电路图转化为实物时&#xff0c;往往会面临软件操作、元件选型和生产对接的多重挑战。本文将以经典NE555叮咚门铃为例&#xff0c;手把手演示如何用立创EDA完成从原理图设计到PCB打板的完整流…...

别再硬算方程了!用Zemax的‘傻瓜式’方法搞定三片摄影物镜设计

颠覆传统&#xff1a;用Zemax高效设计三片摄影物镜的实战指南 在光学设计领域&#xff0c;三片摄影物镜一直被视为经典案例&#xff0c;它既包含了基础光学原理的精髓&#xff0c;又能满足实际摄影需求。然而&#xff0c;传统设计流程中繁琐的方程求解和反复试错让许多工程师望…...

终极微信小程序逆向解析指南:wxappUnpacker专业实战解析

终极微信小程序逆向解析指南&#xff1a;wxappUnpacker专业实战解析 【免费下载链接】wxappUnpacker forked from https://github.com/qwerty472123/wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 微信小程序逆向解析是开发者深入理解小…...