JWT 和 Session 的疑虑
对于 JWT 和 Session,以下是一些常见的疑问:
疑问 1:JWT 和用户权限动态变更
JWT 本质上是一种持久化用户信息的方案,但能否实现用户权限的动态变更,例如踢出用户?
回答:
当需要踢出用户时,JWT 的优势就会丧失,因为服务端需要查询数据库才能获取用户信息。在这种情况下,使用 Session 方案更适合,因为 Session 可以直接从请求中获取用户身份信息。
疑问 2:JWT 与基于 Session 的解决方案
如果不能动态变更用户权限,是否需要回归到基于 Session 的解决方案?
回答:
对于需要动态变更用户权限的场景,基于 Session 的解决方案更合适。JWT 更适用于服务与服务之间的通信,无需考虑踢出用户等操作。
Session 的机制
Session 是一个类似于 map 的数据结构,客户端通过请求携带一个 key,服务端利用此 key 获取 Session。最常见的实现方式是在 Cookie 中放置 sessionid,类似于移动端应用中的 Token。JWT 实际上将“查询 Session”的操作转变为“解析 Session”的操作。