JWT
JWT 的结构、签名机制、校验边界、撤销难点与常见 Web API 使用方式。
#tech / security
#type / concept
#status / growing
#resource / jwt
[!info] related notes
- 所属 MOC: Node.js 后端面试 MOC, security-moc
- 相关概念: Cookie、Session、Token, oauth2, sso, API认证与安全
JWT
JWT(JSON Web Token)是一种自包含的 Token 格式,通常用于身份声明和接口鉴权。
结构
- Header
- Payload
- Signature
一句话理解
JWT 不是认证方案本身,而是一种“把声明打包后再签名”的 Token 格式。
工作原理
常见流程是:
- 服务端生成 Header 和 Payload
- 用密钥或私钥对前两段做签名
- 客户端拿到 JWT 后,在请求里主动携带
- 服务端验证签名、过期时间、issuer、audience 等约束
它的关键点不是“加密”,而是:
让服务端能验证这个令牌是不是自己签发、有没有被篡改。
关键点
- JWT 不是“认证方案”本身,而是 Token 的一种格式
- JWT 本身不等于安全,安全取决于签名校验、过期策略和存储方式
- JWT 可放在 Cookie,也可放在请求头里
为什么它常见
- 适合前后端分离 API
- 适合移动端和多端调用
- 可以在多个服务之间透传身份声明
什么时候它会变麻烦
- 想主动让某个已签发 Token 立刻失效
- 权限变化希望实时生效
- 需要细粒度设备会话管理
这时通常要配合:
- 短期 Access Token
- 长期 Refresh Token
- 黑名单 / 版本号 / Redis
- 更强的服务端会话控制
不该把 Payload 当成什么
- 不是机密保险箱
- 不是数据库
- 不是权限控制的唯一来源
因为 JWT 的 Payload 通常只是可解码可读取的声明,不适合放敏感隐私字段。
常见误区
- 把 JWT 和 Token 对立起来
- 以为 JWT 一旦发出就不需要撤销策略
- 以为存到 localStorage 就天然安全