1. 为什么要用Token?
- HTTP是一个无状态的协议,一次请求结束后,下次在发送服 务器就不知道这个请求是谁发来的了(同一个IP不代表同一个用户),在Web应用中,用户的认证和鉴权又是非常重要的一环。
- 在Web应用发展的初期,大部分采用基于Cookie-Session的会话管理方式,但是基于Session的方法又存在这很多的问题:
- 服务端需要存储Session,并且由于Session需要经常快速查找,通常存储在内存或内存数据库中,同时在线用户较多时需要占用大量的服务器资源。
- 当需要扩展时,创建Session的服务器可能不是验证Session的服务器,所以还需要将所有Session单独存储并共享。
- 由于客户端使用Cookie存储SessionID,在跨域场景下需要进行兼容性处理,同时这种方式也难以防范CSRF攻击。
鉴于基于Session的会话管理方式存在上述多个缺点,基于Token的无状态会话管理方式诞生了,所谓无状态,就是服务端可以不再存储信息,甚至是不再存储Session。
2.Token是什么?
Token是 服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后, 服务器生成-个Token便将此Token返回给客户端后,客户端只需带上这个Token前来请求数据即可,无需再次带上域名和密码。
token的具体逻辑如下:
- 客户端使用用户名,密码进行认证。
- 服务端验证用户名,密码正确后生成Token返回给客户端。
- 客户