news 2026/7/8 9:23:49

JWT 解析全解析:从原理到 Rust 实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JWT 解析全解析:从原理到 Rust 实现

JWT 无处不在——登录认证、API 鉴权、SSO 单点登录。但你真的理解它是怎么工作的吗?本文从原理出发,用 Rust 实现一个 JWT 解析器,并展示在 WATools 中的实际应用。

JWT 是什么?

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间安全地传输声明信息。它本质上是一个经过签名的 JSON 对象的 Base64 编码字符串

一个典型的 JWT 长这样:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT 的三段式结构

JWT 由三个部分组成,用.分隔:

Header.Payload.Signature

1. Header(头部)

包含 Token 类型和签名算法:

{ "alg": "HS256", "typ": "JWT" }

2. Payload(载荷)

包含声明(Claims),即实际传输的数据:

{ "userId": "1234567890", "name": "John Doe", "iat": 1516239022 }

标准声明字段:

字段

全称

说明

iss

Issuer

签发者

sub

Subject

主题(通常为用户 ID)

aud

Audience

接收方

exp

Expiration

过期时间(Unix 时间戳)

iat

Issued At

签发时间

nbf

Not Before

生效时间

3. Signature(签名)

用于验证消息完整性,防止篡改:

HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret )

为什么需要本地解析 JWT?

这是最关键的问题——JWT 中可能包含敏感信息

Payload 只是 Base64 编码,不是加密!任何人都可以解码查看内容。但问题在于,当你把 JWT 粘贴到在线工具时,Token 本身(包括签名信息)被发送到了第三方。

在生产环境中,一个 JWT 可能包含:

  • 用户身份信息
  • 权限角色(role: admin
  • 内部系统标识

这些信息不应该离开你的电脑。

Rust 实现 JWT 解析

在 WATools 中,JWT 解析由 Rust 后端完成,确保高性能和安全性。

核心实现

use base64::{engine::general_purpose::URL_SAFE_NO_PAD, Engine}; use serde_json::Value; pub struct JwtParts { pub header: Value, pub payload: Value, pub signature: String, } pub fn parse_jwt(token: &str) -> Result<JwtParts, String> { let parts: Vec<&str> = token.split('.').collect(); if parts.len() != 3 { return Err("无效的 JWT 格式:应包含三段以 . 分隔的内容".into()); } // 解码 Header let header_bytes = URL_SAFE_NO_PAD.decode(parts[0]) .map_err(|e| format!("Header 解码失败: {}", e))?; let header: Value = serde_json::from_slice(&header_bytes) .map_err(|e| format!("Header JSON 解析失败: {}", e))?; // 解码 Payload let payload_bytes = URL_SAFE_NO_PAD.decode(parts[1]) .map_err(|e| format!("Payload 解码失败: {}", e))?; let payload: Value = serde_json::from_slice(&payload_bytes) .map_err(|e| format!("Payload JSON 解析失败: {}", e))?; // Signature 保留原始字符串 let signature = parts[2].to_string(); Ok(JwtParts { header, payload, signature }) }

注册为 Tauri 命令

#[tauri::command] pub fn jwt_parse(token: String) -> Result<JwtParts, String> { parse_jwt(&token) }

前端调用

import { invoke } from '@tauri-apps/api/core' interface JwtParts { header: Record<string, unknown> payload: Record<string, unknown> signature: string } const result = await invoke<JwtParts>('jwt_parse', { token })

前端展示设计

WATools 的 JWT 解析页面采用三段式卡片布局:

┌─────────────────────────────────────┐ │ 📥 输入 Token │ │ ┌─────────────────────────────────┐│ │ │ 粘贴 JWT Token 到这里... ││ │ └─────────────────────────────────┘│ │ [解析] │ ├─────────────────────────────────────┤ │ ┌─────────┐ ┌─────────┐ ┌───────┐ │ │ │ Header │ │ Payload │ │ Sign │ │ │ │ │ │ │ │ │ │ │ │ alg: │ │ sub: │ │ xxxxx │ │ │ │ HS256 │ │ 12345 │ │ │ │ │ │ typ:JWT │ │ name: │ │ │ │ │ │ │ │ John │ │ │ │ │ └─────────┘ └─────────┘ └───────┘ │ └─────────────────────────────────────┘

每个字段都会被智能识别和标注——标准字段(如expiat)自动翻译为可读名称,时间戳字段自动转换为日期格式。

JWT 常见算法

算法

全称

类型

HS256

HMAC-SHA256

对称加密

RS256

RSA-SHA256

非对称加密

ES256

ECDSA-SHA256

椭圆曲线

PS256

RSA-PSS-SHA256

概率签名

none

无签名

⚠️ 不应用于生产

⚠️安全提醒alg: none的 JWT 不包含签名验证,任何内容都可以被伪造。如果你的系统接受这种 Token,那是一个严重的安全漏洞。

总结

JWT 解析看似简单(Base64 解码 + JSON 解析),但在实际开发中非常重要:

  1. 理解结构:知道 Header、Payload、Signature 各部分的含义
  2. 安全意识:敏感 Token 不要发送到在线工具
  3. 本地优先:用 WATools 这样的本地工具,数据不出你的电脑

想查看完整的 JWT 解析实现源码?来 GitCode Star 一下项目,获取全部源码!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 9:23:23

角色化AI助手开发实战:从技术原理到阿罗娜式系统实现

&#x1f680; 30款热门AI模型一站整合&#xff0c;DeepSeek/GLM/Qwen 随心用&#xff0c;限时 5 折。 &#x1f449; 点击领海量免费额度 最近在AI助手领域&#xff0c;一个名为"阿罗娜"的角色突然引起了开发者的广泛关注。这个源自《蔚蓝档案》游戏的角色设定&a…

作者头像 李华
网站建设 2026/7/8 9:23:11

Labview如何避免和官网程序会有依赖关系冲突

例如DSOX1204A 示波器&#xff0c;驱动Labview程序在C:\Program Files (x86)\National Instruments\LabVIEW 2026\instr.lib\Agilent 2000 3000 X-Series这个路径下&#xff0c;但是新建的项目在其他路径下首先打开官网提供的项目文件&#xff0c;点击另存为存放在新的项目下面…

作者头像 李华
网站建设 2026/7/8 9:17:32

周星驰投资AI公司新作大规模发布

​昨日&#xff08;2026年7月6日&#xff09;&#xff0c;周星驰院线电影新作正式宣布定档7月11日&#xff1b;同日&#xff0c;由周星驰投资的AI内容公司苏州互动之星打造的首批AI剧集正式登陆B站、阅文双平台&#xff0c;作品上线后收获广泛好评与全网关注&#xff0c;市场热…

作者头像 李华
网站建设 2026/7/8 9:17:00

基于STM32与TPS61170的智能高压DC-DC转换系统设计

1. 项目背景与核心器件选型 在工业控制、医疗设备和实验室仪器等领域&#xff0c;经常需要将低压直流电源转换为高压直流电源。传统方案采用分立元件搭建&#xff0c;存在效率低、体积大、稳定性差等问题。本项目采用TI的TPS61170升压转换器与ST的STM32F765ZI微控制器组合&…

作者头像 李华
网站建设 2026/7/8 9:14:05

PMSM 控制算法核心:从磁链、反电势到转矩的 2 个关键系数换算

PMSM控制算法核心&#xff1a;磁链、反电势与转矩系数的工程化实现 1. 永磁同步电机控制的关键参数体系 在永磁同步电机&#xff08;PMSM&#xff09;的磁场定向控制&#xff08;FOC&#xff09;算法中&#xff0c;磁链、反电势系数和转矩系数构成了一个紧密关联的参数体系。这…

作者头像 李华