Skip to content

JWT 鉴权的流程是什么? ​

服务端签发一段带签名的令牌,客户端之后每请求带上它。服务端用密钥验证签名和过期时间,不把会话存在内存里。签名能发现篡改,不能隐藏内容,也不代替 HTTPS。

原理 ​

JWT 分三段:头、载荷、签名,用 Base64URL 编码。载荷里放用户 id、过期时间 exp,不要放密码和隐私明细。任何人都能够解码载荷。

签名用服务器私钥或对称密钥。验证时重新计算签名并比较,再检查 exp 和签发者。过期就拒绝,让客户端用刷新令牌换新的访问令牌。

访问令牌寿命短,放在内存或 Authorization 头。刷新令牌寿命长,放在 HttpOnly Cookie 里,并能单独作废。见 本地存储。

注销不能只靠删掉浏览器里的令牌。短寿命能缩小窗口;真要立刻作废,需要一份黑名单或把令牌版本存在用户记录里。这会让「完全不查存储」不再成立,要在面试里说清这个取舍。

追问 ​

和 Session 怎么选?

Session 的状态在服务器,注销立刻生效,多实例要共享存储。JWT 便于多个服务验证同一把密钥,但注销和权限变更不天然即时。内部后台用 Session 很常见,对外 API 常用短期 JWT。

密钥泄漏了呢?

已签发的令牌都能被伪造,直到换密钥并且拒绝旧密钥。密钥放在环境变量或密钥管理里,不要进仓库。

易错点 ​

  • 把 JWT 说成加密。默认只是签名,载荷可读。
  • 不校验 exp,令牌永久有效。
  • 把刷新令牌和访问令牌同样放进 localStorage。

相关 ​