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

相关推荐
壹米饭18 分钟前
Java程序员学Python学习笔记一:学习python的动机与思考
java·后端·python
全栈派森27 分钟前
机器学习第五课: 深度神经网络
后端·神经网络·机器学习
白露与泡影1 小时前
springboot + nacos + k8s 优雅停机
spring boot·后端·kubernetes
菜鸟谢1 小时前
windows xp 下载 sp0 sp1 sp2 sp3 sp4
后端
AirMan1 小时前
你真的懂 MySQL 的一致性读和当前读的区别吗?
后端·面试
David爱编程1 小时前
容器性能优化实战指南——防止“吃爆”服务器就靠这些招!
后端·docker·容器
Android洋芋1 小时前
GitHub项目部署的终极指南:从零到一掌握Docker实战
后端
林太白2 小时前
Next.js超简洁完整篇
前端·后端·react.js
前端付豪2 小时前
汇丰登录风控体系拆解:一次 FaceID 被模拟攻击的调查纪实
前端·后端·架构
无名之逆2 小时前
大三自学笔记:探索Hyperlane框架的心路历程
java·开发语言·前端·spring boot·后端·rust·编程