JWT 解码与安全分析工具
在浏览器中即时解析 JSON Web Token (JWT) 的 Header、Payload 载荷与过期状态。100% 纯前端内存解析,零网络上传,符合 RFC 7519 规范。
JWT Decoder & Security Inspector
Preset Samples:
231 chars
Valid Token Structure & Active ExpiryAlgorithm: HS256
Decoded Header (Algorithm & Token Type)
{
"alg": "HS256",
"typ": "JWT"
}Decoded Payload (Claims & Subject Data)
{
"sub": "usr_0a1b2c3d",
"name": "Alex Qiang",
"email": "alex@x114.org",
"role": "admin",
"iat": 1792150000,
"exp": 1999999999
}Expires (exp)
2033-05-18 03:33:19 UTC (3:33:19 AM)
in 2378d 15h
Issued At (iat)
2026-10-16 11:26:40 UTC (11:26:40 AM)
27d 0h ago
dGVzdF9zaWduYXR1cmVfaHNfcGxhY2Vob2xkZXI
100% Client-Side Inspection • Secrets & Bearer Tokens Never Leave Your Browser RAM
关于
本 JSON Web Token (JWT) 解码与安全分析工具 严格遵循 RFC 7519 与 RFC 7515 (JWS) 国际标准,提供高可靠的纯前端 JWT 结构解析、有效性语义分析与 Claims 声明审查。所有解析操作 100% 运行在您的本地浏览器内存中,绝不向任何外部网络上传 Bearer 令牌凭据、身份声明或用户敏感数据。
JWT 核心三段式架构与 RFC 7519 规范剖析
一个合法的标准 JSON Web Token 由点号(.)分割的三组 Base64URL 编码串构成:
- 标头(JOSE Header):声明凭证类型(
typ: "JWT")与所采用的密码学数字签名算法(alg,如HS256、RS256、ES256)。 - 有效载荷(Payload / Claims Set):包含经认证的实体信息(通常为用户或微服务身份)及业务声明。划分为保留声明(Registered Claims)、公共声明及私有业务声明。
- 防篡改数字签名(Cryptographic Signature):认证中心(IdP)使用对称密钥或非对称私钥,对 Base64URL 编码后的 Header 与 Payload 进行哈希签名产生的二进制摘要。签名赋予令牌防伪造、抗篡改与不可抵赖性。
RFC 7519 标准保留 Claims 字典速查
| Claim 键名 | 英文全称 | 数据类型 | 规范标准含义与安全校验规则 |
|---|---|---|---|
| iss | Issuer (签发者) | String / URI | 标明颁发该令牌的认证中心地址(如 https://accounts.google.com)。网关必须校验签发者是否可信。 |
| sub | Subject (主体标识) | String | 该令牌所代表的主体全局唯一 ID(用户 UID、微服务 Client ID 等)。 |
| aud | Audience (受众目标) | String / Array | 标明该令牌预期的接收方服务。若 API 服务的受众标识不在 aud 中,必须坚决拒绝受理。 |
| exp | Expiration Time (过期时间) | NumericDate (秒) | 令牌过期的 Unix 时间戳(秒级)。服务端时间超过该值必须拒绝鉴权并触发刷新机制。 |
| nbf | Not Before (生效时间) | NumericDate (秒) | 令牌正式生效的起始时间。可用于预约生效的未来授权凭据。 |
| iat | Issued At (签发时间) | NumericDate (秒) | 令牌被签发生成的 Unix 时间戳。常用于判定令牌的最大允许存活时长。 |
| jti | JWT ID (唯一编号) | String | 该令牌的全局唯一随机字符串。网关配合分布式缓存(如 Redis)可防止恶意的重放攻击(Replay Attacks)。 |
密码学数字签名算法横向对比
| 签名算法 | 密码学原理 | 密钥类型 | 最佳应用架构 | 潜在安全风险与防范策略 |
|---|---|---|---|---|
| HS256 | HMAC with SHA-256 | 预共享单一对称密钥 | 单体应用、内网高吞吐微服务 RPC | 密钥长度不足 256 位易遭字典暴力破解;多服务共享存在密钥泄露连带风险。 |
| RS256 | RSA-SHA256 (2048+ 位) | 非对称公私钥对 | 企业级 SSO、OAuth 2.0 / OIDC 开放平台 | 需防范“算法混淆攻击”(攻击者诱导服务端用 RSA 公钥充当 HMAC 对称密钥校验)。 |
| ES256 | ECDSA (P-256 椭圆曲线) | 椭圆曲线非对称密钥 | 现代云原生 API、移动 App、WebAuthn | 依赖加密级高质量随机数发生器生成临时随机数,否则有私钥泄露风险。 |
| EdDSA | Edwards 曲线 (Ed25519) | 现代高性能椭圆曲线 | 边缘计算鉴权 (Cloudflare Workers, Fastly) | 天然免疫侧信道计时攻击,运算极快,安全性极高。 |
| none | 无签名纯文本 | 无 | 仅限内网脱敏单元测试 | 致命缺陷:若线上网关未禁用 alg: "none",黑客可无障碍伪造管理员权限令牌。 |
开发者后端服务端验签示例代码
1. Node.js & TypeScript (jsonwebtoken)
import jwt from 'jsonwebtoken';
interface UserClaims {
sub: string;
email: string;
role: string;
}
export function verifyUserToken(token: string, secretKey: string): UserClaims {
// 显式白名单指定 algorithms 防止算法混淆攻击
return jwt.verify(token, secretKey, {
algorithms: ['HS256'],
issuer: 'https://auth.x114.org',
audience: 'x114-api'
}) as UserClaims;
}
2. Python 3 (PyJWT)
import jwt
def authenticate_request(bearer_token: str, public_pem: str) -> dict:
"""使用公钥安全验证 RS256 签名并核验过期时间与受众"""
return jwt.decode(
bearer_token,
public_pem,
algorithms=["RS256"],
audience="x114-api",
options={"require": ["exp", "iss", "sub"]}
)
3. Go (github.com/golang-jwt/jwt/v5)
package auth
import (
"errors"
"github.com/golang-jwt/jwt/v5"
)
func ValidateToken(tokenString string, hmacSecret []byte) (*jwt.MapClaims, error) {
token, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {
if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, errors.New("unexpected signing algorithm")
}
return hmacSecret, nil
})
if err != nil || !token.Valid {
return nil, errors.New("invalid or expired token")
}
claims := token.Claims.(jwt.MapClaims)
return &claims, nil
}