什么是 JWT ?
JWT 的全称是 JSON Web Token,是一种跨域认证解决方案。
所谓认证,就是获取用户的身份信息。我们知道,Http 是一种无状态协议,为了实现认证和跟踪用户信息,开发者发明了 cookie-session 方案,该方案流程如下:
- 用户向服务器发送用户名和密码;
- 服务器验证通过后,在 session 里保存相关数据;
- 服务器返回一个 session_id,写入客户端的 Cookie;
- 之后,用户的每次请求都会通过 Cookie 把 session_id 传回给服务器;
- 服务器通过 session_id,找到先前保存的数据,得到用户信息。
这种方案存在几个问题:
- 如果是服务器集群,要求 session 数据要共享,要求每一台服务器都能够读取并同步 session;
- 前后端分离,跨域访问的情况下,每次请求的 session_id 都会不一样;
- 如果是多端(ios/Android/Web)共用一套后端 API 服务,移动端无法储存 Cookie,需要另辟蹊径。
- session 数据是保存在服务器的内存中,无形中增加了服务器的压力。
而 JWT 解决了上述问题,它的思想是:服务器不保存 session 数据了,数据全部保存在客户端,每次请求的时候都发回服务器验证。