发布时间:2026/8/25 13:41:40
JWT Token 如何解析? JWTJSON Web Token是前后端分离、微服务架构中最主流的身份认证方案之一凭借紧凑、自包含的特性被广泛应用于接口鉴权、用户会话、跨域认证等场景。很多开发者只停留在 “拿 Token 请求接口” 的使用层面并不清楚 JWT 的内部结构与完整解析逻辑甚至误以为 Token 内容是加密的。本文将从结构原理、手动解析、代码实现、安全校验四个维度完整讲解 JWT Token 的解析全过程。一、解析前提理解 JWT 的三段式结构解析 JWT 的核心前提是先搞懂它的标准组成。一个合法的 JWT 是由英文句号.分隔的三段 Base64URL 编码字符串格式固定为Header.Payload.Signature分别对应头部、载荷、签名三部分。1. Header头部头部是描述 JWT 元数据的 JSON 对象通常包含两个核心字段alg签名算法常见值为 HS256HMAC-SHA256、RS256RSA-SHA256typ令牌类型标准值固定为JWT原始 JSON 示例{ alg: HS256, typ: JWT }对该 JSON 执行Base64URL 编码就得到了 JWT 的第一段字符串。2. Payload载荷载荷是存放业务数据的 JSON 对象也是我们解析后真正要读取的内容。标准规范定义了 7 个推荐声明字段Claimiss令牌签发者exp过期时间Unix 时间戳格式sub令牌主题aud令牌受众nbf生效时间在此时间前令牌不可用iat签发时间jtiJWT 唯一标识除标准字段外可自由添加业务字段比如userId、role等。 原始 JSON 示例{ sub: user_auth, userId: 10086, role: admin, exp: 1750000000 }同样经过Base64URL 编码后得到 JWT 的第二段字符串。重要提醒Base64URL 是编码格式而非加密算法任何人拿到 Token 都可以反向解码出载荷明文。绝对不能在 Payload 中存放密码、密钥、身份证号等敏感信息。3. Signature签名签名是 JWT 安全性的核心作用是防止 Token 内容被篡改。生成逻辑分为三步将编码后的 Header 和 Payload 用.拼接成完整字符串使用 Header 中指定的算法配合服务端密钥secret对拼接字符串执行签名运算将运算结果做 Base64URL 编码得到 JWT 的第三段签名以最常用的 HS256 算法为例签名公式为HMACSHA256(base64UrlEncode(header) . base64UrlEncode(payload), secret)二、JWT 解析的本质解码 ≠ 完整解析很多开发者对 “解析” 存在误解需要先明确两个概念的区别单纯解码仅对前两段做 Base64URL 反解拿到 JSON 明文。任何人拿到 Token 都能完成不验证合法性不能用于鉴权。完整解析格式校验 内容解码 签名验证 业务规则校验这才是服务端鉴权场景下的规范流程。一个标准的 JWT 完整解析流程应当包含四步按.拆分三段字符串校验格式是否合法对 Header、Payload 分别做 Base64URL 解码转换为 JSON 对象使用相同算法和服务端密钥重新计算前两段的签名与 Token 第三段对比一致则证明未被篡改校验exp过期时间、nbf生效时间、iss签发者等业务字段是否符合要求三、实操演示手动解析一个 JWT我们用一个真实 Token 演示手动解码的完整过程示例 TokeneyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyX2F1dGgiLCJ1c2VySWQiOjEwMDg2LCJyb2xlIjoiYWRtaW4iLCJleHAiOjE3NTAwMDAwMDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c步骤 1拆分三段内容按.分割字符串得到三个独立部分Header 编码eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9Payload 编码eyJzdWIiOiJ1c2VyX2F1dGgiLCJ1c2VySWQiOjEwMDg2LCJyb2xlIjoiYWRtaW4iLCJleHAiOjE3NTAwMDAwMDB9Signature 编码SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c步骤 2解码 HeaderJWT 使用的是 Base64URL与标准 Base64 有三处区别将替换为-将/替换为_移除末尾的填充字符对第一段执行 Base64URL 解码得到原始 Header{ alg: HS256, typ: JWT }步骤 3解码 Payload用同样方式解码第二段即可读取所有业务字段{ sub: user_auth, userId: 10086, role: admin, exp: 1750000000 }此时我们已经能看到完整的载荷内容但这一步仅能用于查看信息绝对不能以此作为权限判断依据—— 因为 Token 可能已经被篡改。步骤 4验证签名核心安全步骤使用 Header 声明的 HS256 算法加上服务端密钥对header_base64.payload_base64重新计算签名再与 Token 第三段做对比两者一致Token 未被篡改内容可信两者不一致Token 被伪造或修改直接拒绝访问四、主流编程语言的 JWT 解析实现实际开发中不建议手动造轮子成熟的开源 JWT 库会自动完成解码、签名校验、时效校验等全套逻辑下面列举三种常用语言的实现方式。1. JavaScript / Node.jsjsonwebtoken 库安装依赖npm install jsonwebtokenconst jwt require(jsonwebtoken); const secret your_server_secret_key; const token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...; // 完整解析 签名时效校验服务端鉴权推荐 try { const decoded jwt.verify(token, secret); console.log(解析结果, decoded); } catch (err) { console.log(Token 无效, err.message); } // 仅解码、不校验签名仅用于前端展示不可鉴权 const payloadOnly jwt.decode(token);2. PythonPyJWT 库安装依赖pip install pyjwtimport jwt secret your_server_secret_key token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... try: # 自动校验签名、过期时间 payload jwt.decode(token, secret, algorithms[HS256]) print(解析结果, payload) except jwt.ExpiredSignatureError: print(Token 已过期) except jwt.InvalidTokenError: print(Token 无效)3. JavaJJWT 库常用 Maven 依赖io.jsonwebtoken:jjwt-api示例代码import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.security.Keys; import javax.crypto.SecretKey; public class JwtParserDemo { public static void main(String[] args) { String secret your_32byte_long_secret_key_here; SecretKey key Keys.hmacShaKeyFor(secret.getBytes()); String token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...; try { Claims claims Jwts.parserBuilder() .setSigningKey(key) .build() .parseClaimsJws(token) .getBody(); System.out.println(userId: claims.get(userId)); } catch (Exception e) { System.out.println(Token 解析失败 e.getMessage()); } } }五、解析 JWT 必须做的 4 项安全校验只解码不校验等于完全放弃鉴权能力。服务端完整解析 JWT 时必须包含以下四项校验签名合法性校验最核心的一步防止攻击者篡改 Payload比如将普通用户角色改为管理员。过期时间exp校验判断当前时间是否超过exp自动拒绝过期 Token。生效时间nbf校验判断当前时间是否早于nbf拒绝尚未生效的 Token。签发者与受众校验多系统、多租户场景下校验iss和aud是否匹配防止 Token 跨系统冒用。六、常见误区与踩坑点误区JWT 是加密的别人看不到内容错误。前两段只是 Base64URL 编码可直接反向解码。敏感信息绝对不能放在 Payload 中。误区前端解析后的数据可以信任错误。前端没有服务端密钥无法验证签名。前端解析结果仅用于页面展示所有权限判断必须以服务端校验为准。踩坑用标准 Base64 解码失败 / 乱码JWT 使用的是 Base64URL 变体直接用普通 Base64 工具解码可能报错。需要先将-换回、_换回/并补全末尾的填充符。踩坑密钥过短导致安全风险HS256 算法建议密钥长度不少于 32 字节过短的密钥极易被暴力破解。七、总结JWT 解析的本质是 “Base64URL 解码 签名验证 业务规则校验” 的组合动作解码门槛极低仅能用于查看内容不具备安全性签名验证是安全核心是服务端鉴权的必要前提实际开发优先使用成熟开源库不要手动实现签名与校验逻辑理解完整的解析原理后你就能避开绝大多数 JWT 使用中的安全漏洞也能更高效地排查 Token 失效、鉴权异常等线上问题。

相关新闻

2026/8/25 13:36:38

从需求到页面:分布式网络管理的 ArkTS 原生实现

分布式网络管理页面:用设备选择、网络切换和链路采样理解 ArkUI 状态驱动 开场:先看见一个完整的页面 打开这个应用,首先看到的是一张浅蓝色的标题卡片。卡片上写着“分布式网络管理”,下面是一句很短的说明:“查看设备…

2026/8/25 16:07:08

装修还没开工,AI已经替你把坑踩了一遍

装修这件事,大概是成年人世界里最让人头疼的“必修课”之一。 你刚拿到新房钥匙,满心欢喜地开始看效果图、选风格、谈装修公司。设计师给你看的效果图美得让你心动——无主灯设计、满墙收纳柜、开放式厨房、艺术吊顶……每一个细节都像是理想中家的模样…

2026/8/25 16:07:08

Linux 驱动研究 —— SDIO (5)

1. 计算机体系“总线”与 Linux 驱动“总线” 1.1 硬件电路上的“总线”1.2 内核驱动架构中的“总线”1.3 两者的映射关系与本质区别1.4 狭义共享总线与广义 Linux 驱动总线的区别 1.4.1 计算机系统结构中对总线的严格定义1.4.2 物理接口泛化为 bus_type 1.5 物理可枚举总线 与…

2026/8/25 16:07:08

告别复制乱码:从「秘塔怎么复制表格」到「AI 导出鸭」的专业解法

告别复制乱码:从「秘塔怎么复制表格」到「AI 导出鸭」的专业解法让AI导出回归优雅,每一份对话都值得被体面珍藏。当复制粘贴成为一种惩罚 一个真实的场景:某高校金融系副教授需要将秘塔AI生成的宏观分析报告整理为教研材料。报告包含多组嵌套…

2026/8/25 16:07:08

win11开机跳过网络连接

‌ShiftF10,调出命令提示符窗口。 oobe\BypassNRO 或 oobe\BypassNRO.cmd,回车。系统自动重启,重启后回到联网界面,点击右下角的「我没有Internet连接」选项,再选择「继续执行受限设置」。

2026/8/25 16:02:08

linux线程同步图解

线程同步方法图解:从多人厨房到播放器状态机线程同步不是“加锁”两个字能概括的事,它更像给一群人协作制定规则:谁能进、谁要等、什么时候一起走、谁来统一排队处理。为什么需要线程同步:多人厨房的混乱现场 想象一个后厨同时来了…

2026/8/25 1:04:19

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 8:17:29

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 0:04:14

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

2026/8/25 0:04:14

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…