JWT令牌

JWT(JSON Web Token)整体是三段由 . 分隔的 Base64URL 字符串,结构:
Header.Payload.Signature
示例完整 token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

一、三段分别作用

1. Header 头部(第一段)

作用:声明加密算法、令牌类型,JSON → Base64URL 编码
标准字段:
  • alg:签名算法(常用 HS256、RS256)
  • typ:固定 JWT,表示这是 JWT 令牌
原始 JSON 示例:
1 {
2   "alg": "HS256",
3   "typ": "JWT"
4 }

2. Payload 载荷(第二段,核心业务数据)

存放业务信息、过期规则,同样 Base64URL 编码,分两类字段:

1)官方标准声明(推荐使用)

 
字段含义
iss 签发者(服务端地址)
sub 主题,一般存用户 ID
aud 接收方 / 客户端
exp 过期时间戳(秒,必填)
nbf 生效时间,在此之前不可用
iat 签发时间戳
jti JWT 唯一 ID,防重放

2)自定义私有声明(业务自定义)

比如 usernameroleuserIdtenantId 等业务字段。
原始 Payload 示例:
1 {
2   "sub": "10001",
3   "username": "admin",
4   "role": "admin",
5   "iat": 1789000000,
6   "exp": 1789086400
7 }
⚠️ 重点提醒:Payload 只是 Base64 编码,不是加密!不能存密码、银行卡等敏感数据,任何人拿到 token 都能解码查看内容。

3. Signature 签名(第三段,防篡改核心)

生成规则:
  1. Header.Base64字符串 + "." + Payload.Base64字符串 拼接
  2. 使用 Header 指定的算法 + 密钥 / 私钥 进行加密哈希
  3. 输出 Base64URL 字符串
以 HS256(对称加密)为例公式:
1 HMACSHA256(
2   base64UrlEncode(header) + "." + base64UrlEncode(payload),
3   密钥secret
4 )
作用:校验 token 是否被篡改,只要 header/payload 任意字符被修改,签名校验直接失败。

二、两种加密方案区别

  1. HS256(HMAC-SHA256 对称加密)
    • 只用一个密钥 secret,签发、校验都用同一个密钥
    • 适合单体项目,简单易用
  2. RS256(RSA 非对称加密)
    • 私钥:服务端签发 token
    • 公钥:网关 / 客户端校验签名
    • 适合微服务、第三方登录,密钥不会泄露

三、传输使用规范

  1. HTTP 请求头携带(标准方式)Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
  1. 禁止放 URL 参数(日志会泄露 token)
  2. HTTPS 环境使用,防止抓包窃取

四、补充:Base64URL 和普通 Base64 区别

JWT 使用 Base64URL 做编码,替换 3 个特殊字符适配 URL 传输:
  • +-
  • /_
  • 末尾填充 = 直接删除

五、最简 Java 生成示例(HS256)

1 // 依赖 jjwt
2 JwtBuilder builder = Jwts.builder()
3         .setSubject("10001") // 用户id
4         .claim("username", "admin")
5         .setIssuedAt(new Date())
6         .setExpiration(new Date(System.currentTimeMillis() + 30 * 60 * 1000)) //30分钟过期
7         .signWith(SignatureAlgorithm.HS256, "自定义密钥secret")
8         .compact();

 

posted @ 2026-07-04 20:41  record-100  阅读(13)  评论(0)    收藏  举报