概念|JWT(含 Scopes)
JWT 是现代 API 鉴权主流令牌。理解结构与陷阱,才能安全使用。
① 是什么
JWT 是自包含令牌:三段 header.payload.signature(Base64Url 编码)。服务端用签名验证”内容未被篡改”,无需查库即可信任声明(claims)。
② 为什么重要
- 签名可被绕过或密钥可爆破 → 攻击者可伪造任意身份/权限。
scope声明决定”能访问什么”,是 API 授权关键。
③ 核心概念拆解(带示例)
- 结构示例(解码后):
header: {"alg":"HS256","typ":"JWT"}
payload: {"sub":"alice","role":"user","scope":"read:profile","exp":1700000000}
signature: HMAC-SHA256(base64(header)+"."+base64(payload), key)
实际令牌形如 eyJhbGc...eyJzdWI...签名。
- 算法:对称
HS256(共享密钥)或非对称RS256(私钥签、公钥验)。 - 经典漏洞:
- alg=none:服务端若接受”无签名”,令牌可被任意篡改。
- 密钥可爆破:HS256 弱密钥时离线爆破并伪造。
- 过期不校验:忽略
exp导致令牌永久有效。
- Scopes:payload 里声明权限范围(如
read:profile),服务端据此做对象/功能级授权(呼应 WSTG APIT-03/05)。
④ 常见误区
- JWT 加密?默认只签名不加密,payload 可被解码读(敏感数据别放 payload)。
- 改了算法就安全?必须服务端白名单固定算法(禁用 none)。
- 有 JWT 就有权限?仍要服务端按 scope/角色校验,不能只验签名。
⑤ 一句话小结
JWT 用签名保证声明不被篡改;安全要点是固定算法(禁 none)、强密钥、校验过期,并用 scope 做服务端授权。
下一篇:JWT 安全实验
参考来源:https://jwt.io/introduction