JWT与Session
一种令牌格式, 改进了 Session 需要状态管理的缺点, 通过用户提供token来实现令牌发放
Categories:
作为令牌格式, JWT 和 session 在用户认证上时常用到
Session
经典的 Session
登录流程如下
-
用户向服务器发送用户名和密码。
-
服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
-
服务器向用户返回一个 session_id,写入用户的 Cookie。
-
用户随后的每一次请求,都会通过 Cookie,将
session_id
传回服务器。 -
服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。
单机环境下, session 实现简单, 方便快速, 服务器维护与用户的连接(下称 Sesssion
), 用户传入 id 来更新session
但是分布式集群下, 各个服务需要不断的请求并写入session, 这使得session服务器成为了登录中心服务器, 一旦中心服务器挂了, 整个分布应用宕机
既然服务器维护session成本这么高, 干脆不维护了, 让用户维护
于是诞生了 JWT
JWT
JWT 的原理是,服务器认证以后,生成一个 JSON 对象,发回给用户,就像下面这样。
{
"姓名": "张三",
"角色": "管理员",
"到期时间": "2018年7月1日0点0分"
}
服务器就不保存任何 session 数据了,也就是说,服务器变成无状态了,从而比较容易实现扩展。