JWT vs Session
一. session 1.1 session对于服务器的开销 在传统的用户登录认证中,都是采用session方式。用户登录成功,服务端会保证一个session,当然会给客户端一个sessionId,客户端会把sessionId保存在cookie中,每次请求都会携带这个sessionId。cookie+session这种模式通常是保存在内存中,而且服务从单服务到多服务会面临的session共享问题,随着用户量的增多,开销就会越大 1.2 session对于服务扩展性的限制 用户认证之后,服务端做认证记录,如果认证的记录被保存在内存中的话,这意味着用户下次请求还必须要请求在这台服务器上,这样才能拿到授权的资源,这样在分布式的应用上,相应的限制了负载均衡器的能力。这也意味着限制了应用的扩展能力。 1.3 session+cookie认证方式存在的风险 CSRF: 因为是基于cookie来进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。 二. jwt(json web token) jwt的认证方式只需要服务端生成token,客户端保存这个token,每次请求携带这个token,服务端认证解析就可。 2.1 jwt生成的流程 客户端使用用户名和密码请求服务器 服务器验证后返回一个jwt 客户端存储jwt, 每次请求都会携带这个jwt 服务器验证jwt, 并返回数据 2.2 jwt的构成: jwt有三部分构成: header, payload, signature 2.2.1 header(头部) jwt头部中承载了两个信息, 完整的头部类似与: { ‘typ’: ‘JWT’, ‘alg’: […]