← AI 百科

JWT(JSON Web Token)

AI编程 · AI编程 / 安全 / 登录
一句话:一种自包含用户信息的Token格式,服务器不用查数据库就能验证有效性,但也因此很难在有效期内主动作废。

它是什么

JWT把用户信息(如用户ID、角色、过期时间)编码进Token本身,并用签名保证内容没被篡改。服务器收到JWT后只要验证签名正确,就能直接读出里面的用户信息,不需要额外查数据库确认,这是它比普通Token快的原因,但也带来了"签发后很难主动撤销"的代价。

适合干什么

  • 需要减少数据库查询压力的身份验证场景
  • 微服务架构下多个服务之间共享身份验证

不适合干什么

  • 需要随时能主动强制某个用户下线的场景(JWT本身不容易做到这点,需要额外机制配合)

普通人怎么用

理解JWT由三部分组成(头部.载荷.签名),载荷部分是Base64编码不是加密,不要把密码等真正敏感的信息直接放进JWT里,因为任何人都能解码看到内容(只是不能篡改,不是看不到)。

进阶用户怎么用

为了解决JWT难以主动撤销的问题,常见方案是设置较短的过期时间配合刷新令牌机制,或者维护一个"黑名单"记录需要提前作废的Token;签名密钥要妥善保管,泄露意味着任何人可以伪造有效的JWT。

常见误区

  • 以为JWT里的信息是加密的,实际载荷部分只是编码不是加密,任何人都能解码看到里面的内容,只是不能修改(修改会导致签名验证失败)
  • 签发了JWT后想要提前让它失效(比如用户改密码后旧token应该失效),发现默认机制做不到,需要额外设计方案

和相似工具的区别

  • 和普通Token的区别:普通Token通常只是个随机字符串,服务器需要查数据库/缓存验证;JWT自包含信息,验证签名即可,不用查库,但因此撤销机制更复杂

入门步骤

  • 选择JWT库生成和验证Token
  • 载荷里只放非敏感的必要信息
  • 设置合理的过期时间并配合刷新机制