组成)
目录JWT 由 3 部分组成用 . 分隔Header.Payload.Signature1. Header 头部第一部分2. Payload 载荷第二部分不要放敏感数据只是 Base64 编码可解码3. Signature 签名第三部分另外一种不透明 TokenRandom Token快速对比常见两种JWT最常用和 OAuth2 的 access_token不透明字符串一般说 token 多指 JWT。JWT 由 3 部分组成用.分隔Header.Payload.Signature1. Header 头部第一部分JSONBase64URL 编码alg签名算法如 HS256、RS256typ类型固定JWT示例原始json{alg:HS256,typ:JWT}2. Payload 载荷第二部分不要放敏感数据只是 Base64 编码可解码JSONBase64URL 编码存放声明Claims分三类注册声明标准iss签发者 issuersub主题 / 用户 ID subjectaud接收方 audienceexp过期时间 expiration时间戳nbf生效时间 not beforeiat签发时间 issued atjtiJWT 唯一编号公共声明自定义业务字段如用户名、角色私有声明业务自定义如部门 ID3. Signature 签名第三部分公式Signature HMACSHA256( base64UrlEncode(Header) . base64UrlEncode(Payload), secret/私钥 )作用校验 token 是否被篡改。对称加密 (HS256)同一个 secret 用来签名 验签非对称 (RS256)私钥签名公钥验签⚠️ 重点Header 和 Payload 只是 Base64URL不是加密任何人都能解码看到内容密码、手机号绝对不能放 payload。签名只能防篡改不能加密数据。另外一种不透明 TokenRandom Token很多系统 access_token 只是一串随机字符串UUID、随机串本身不带信息。客户端拿到随机 token服务端收到后去Redis / 数据库查询这个 token 对应的用户信息、过期时间结构上没有 Header/Payload就是一串 ID。优点可以随时销毁 token缺点每次请求都要查存储。快速对比类型内部是否带用户信息是否可主动作废JWT✅ 载荷自带信息❌ 原生很难作废要额外黑名单随机不透明 Token❌ 本身无信息✅ Redis 直接删除即可失效