JWT要点备忘录

979 阅读1分钟

截屏2022-11-07 13.14.13.png

JSON Web Token 缩写 (JWT),以加密后的JSON对象传输信息

应用场景
  1. 授权登录(SSO)
  2. 信息交换
构成

包含三部分,以.分割

  • Header(头部)
  • Payload(负载)
  • Signature(签名)

常见形式:xxxxxx.yyyyyy.zzzzzz

实例

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.cThIIoDvwdueQB468K5xDc5633seEFoqwxjF_xSJyQQ

Header: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

Payload: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

Signature: cThIIoDvwdueQB468K5xDc5633seEFoqwxjF_xSJyQQ

字符串通过Base64解码后得到如下信息:(所以隐秘信息不能放在这里!)

Header

{
  "alg": "HS256", // 加密算法
  "typ": "JWT"    // token 类型
}

Payload

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

JWT规定了7个官方字段供选用

iss (issuer) : 签发人 
exp (expiration time) : 过期时间 
sub (subject) : 主题 
aud (audience) : 受众 
nbf (Not Before) : 生效时间 
iat (Issued At) : 签发时间 
jti (JWT ID) : 编号

开发者也可以自己指定字段和内容

Signature

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)

通过签名算法 HMACSHA256Header里指定) 得到的签名字符串:

cThIIoDvwdueQB468K5xDc5633seEFoqwxjF_xSJyQQ

其中:secret 密钥由服务器指定,不能泄漏给用户

传输途径

Http 请求头配置 Authorization

Authorization: Bearer <token>

服务端获取token后可以 通过 srcret 验签比对,防止篡改

编解码示例图

截屏2022-11-07 13.19.37.png

学习地址