对 JWT(JSON Web Token)令牌的完整讲解

✅ 一、JWT 是什么?

JWT(JSON Web Token) 是一种用于 用户身份验证信息安全传输 的令牌机制。它以 JSON 格式的数据 在客户端和服务端之间传递,通常用于用户登录后的授权

简单说:你登录成功后,服务器发你一个"身份证"------JWT,你之后访问资源就带着它,不用每次都重新登录。

📦 二、JWT 的结构(由三部分组成)

JWT 是一个由 .分隔的三段字符串,格式如下:

css 复制代码
header.payload.signature

1️⃣ Header(头部)

说明令牌的类型和签名算法:

json 复制代码
{
  "alg": "HS256",
  "typ": "JWT"
}

2️⃣ Payload(负载)

  • 存放用户的非敏感信息,比如用户ID、用户名、角色等;

  • 也可放一些标准字段如 exp(过期时间):

json 复制代码
{
  "sub": "123456",
  "name": "小杰",
  "role": "admin",
  "exp": 1710000000
}

3️⃣ Signature(签名)

是用于防篡改的签名,防止中间人修改 Payload:

scss 复制代码
HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)

🔐 三、JWT 的核心机制

  1. 用户登录成功,服务器根据用户信息生成一个 JWT(签名加密);
  2. 客户端保存该 JWT(通常放在浏览器本地存储或前端缓存);
  3. 每次请求 API 时,把 JWT 放在请求头:
http 复制代码
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6...
  1. 服务器解析 JWT,校验签名、检查是否过期,并基于其中的信息完成鉴权。

🎯 四、JWT 的典型使用场景

场景 说明
登录认证 用户登录后获得令牌
单点登录(SSO) 多系统共享登录状态
接口调用授权 API 接口访问权限控制
移动端/前后端分离 Token 代替传统 Session

🛡️ 五、JWT 的安全建议

安全点 建议
签名密钥保密 secret 必须保存在服务端,不可泄露
不存敏感信息 Payload 是明文可解码,不要放密码、身份证等
设置过期时间 exp 字段控制有效期,定期刷新
使用 HTTPS 防止 Token 被中间人截获
加签算法选择 推荐 HS256 或 RSA(非对称更安全)

🧪 六、JWT 示例(真实令牌样式)

json 复制代码
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJ1c2VySWQiOjEyMywidXNlcm5hbWUiOiJ4aWFvamllIn0.
4VzV5Oxf9bAWlLS8MbhMELEzqJKAKFYsKL8TXp6nEbs

你可以把前两段(Header 和 Payload)复制到 jwt.io 查看解码效果。

📁 七、后端中如何生成 JWT?(以 Java 为例)

jjwt(Java JWT)库示例:

java 复制代码
String jwt = Jwts.builder()
    .setSubject("小杰")
    .claim("role", "admin")
    .setExpiration(new Date(System.currentTimeMillis() + 3600_000)) // 1小时过期
    .signWith(SignatureAlgorithm.HS256, "mySecretKey")
    .compact();

✅ 总结一句话

JWT 是一种无状态、跨平台的认证机制,安全、高效、前后端分离首选,但也需合理控制过期、签名、防泄露。

相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
大勇前进2 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu2 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile2 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白802 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙2 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端
盖伦发发2 天前
软件工程SOLID 五大设计原则
后端·软件工程