token的意思是“令牌”,是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由于token的前几位+盐 以hash算法压缩成一定长的16进制字符串,可以防止恶意第三方拼接token请求服务器),还可以把不变的参数也放进token,避免多次查库。
传统的身份验证:
session + cookie
- 客户端访问,通过验证
- 服务器生产一条记录,记录一些必要信息
- 把记录这些信息的ID号发送给客户端
- 客户端收到ID号后存储在cookie中
- 下次客户端重新访问服务端是,带上cookie信息
- 服务端验证cookie里面的信息,如果能找到对应的记录,则用户通过了身份验证,就把用户请求的数据返回给客户端
我们需要在服务器端存储为登录的用户生成的Session,这些Session可以存储在内存,磁盘,或者数据库里。我们可能需要在服务器端定期的去清理过期的Session。
基于Token的身份验证
使用基于Token的身份验证方法在服务器段不需要存储用户的登陆记录。
- 客户端使用账号密码请求登录
- 服务器端收到请求,验证账号密码
- 验证通过,服务端签发一个token给客户端
- 客户端收到token存储起来(例如:存放在cookie)
- 客户端每次请求服务端时带着服务端签发的token
- 服务端收到请求,验证token。验证成功则返回数据,失败则重新登录。