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

相关推荐
小信丶17 分钟前
Spring Boot 简单接口角色授权检查实现
java·spring boot·后端
橙子家1 小时前
Bcrypt 简介与加密和验证示例【加密知多少系列_8】
后端
无限大61 小时前
《计算机“十万个为什么”》之 🔠 字符集:数字世界的文字密码本 🗝️
后端
hweiyu001 小时前
Scala实用编程(附电子书资料)
开发语言·后端·scala
桦说编程2 小时前
交替打印最容易理解的实现——同步队列
java·后端·设计模式
一块plus3 小时前
1,000 万 DOT 奖励,JAM Prize 邀你共建 Polkadot 下一代基础设施!
javascript·后端·github
Clay3 小时前
nestjs实战 - buildadmin重构后端(初始化mock接口)
javascript·后端
巴厘猫3 小时前
Java开发者新机遇:LangChain4j——在Java中构建LLM应用的利器
java·后端·langchain
科米米3 小时前
demo01 ffmpeg 从usb uvc摄像头读取一张图片
后端
loop lee3 小时前
【Spring】一文了解SpringMVC的核心功能及工作流程,以及核心组件及注解
java·后端·spring