一、Token是什么
Token,就是用户身份验证的令牌,代表执行某些操作的权利的对象,本质上是服务端生成的一串加密字符串、用于客户端进行请求的“令牌”。
当用户第一次使用账号密码成功登
陆后,服务器就生成一个token和token失效时间并返回给客户端,在有效时间内,只要带着这个token请求数据,就无需用户名和密码。
微信QQ等平台当我们第一次输入账号密码后,后续登录不需要再次输入账号密码就可以登录,就是这个token在发挥作用,同时,因为token具有有效时间,过了有效时间,我们再次登录就需要重新输入账号密码。这个有效时间也是为了账号的安全
二、Token的特点
1、Token具有随机性、不可预测性、时效性、无状态、跨域等特点。
2、Token完全由应用管理,所以它可以避开同源策略
3、Token可以避免CSRF攻击
4、Token可以是无状态的,可以在多个服务间共享
5、Token是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回Token给前端。前端可以在每次请求的时候带上Token证明自己的合法地位。如果这个Token在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。
服务器的session_id存储到cookies中也能做到,为什么非要用Token呢?开发web应用的话,用两者都可以,但如果是开发API接口,前后端分离,最好使用Token,因为session+cookies是基于web的,但针对API接口可能会考虑到移动端,app是没有cookies和session的。
三、Token和Cookie的区别
Cookie(或者Cookies):类型是小型文本文件,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
一般接口通过HTTP 协议来进行数据交换,而 HTTP 协议的特点是,无状态,工作前通过三次握手建立连接,工作完成后立刻通过四次挥手断开连接,每次连接都是独立存在的,没有任何状态将请求串联成一个整体,因此每次都需要重新验证是身份,即耗费了性能,也给黑客的攻击留下隐患。
Cookie 的作用就是来弥补 HTTP 无状态的问题,Cookie 可以作为一个状态保存的状态机,用来保存用户的相关登录状态,当第一次验证通过后,服务器可以通过 set-cookie 令客户端将自己的 cookie 保存起来,当下一次再发送请求的时候,直接带上 cookie 即可,而服务器检测到客户端发送的 cookie 与其保存的 cookie 值保持一致时,则直接信任该连接,不再进行验证操作。
Cookie的存储内存空间只有4kb,因此
存储的主要是一个用户 id,其他的用户信息都存储在服务器的 Session 中,而 Token 没有内存限制,用户信息可以存储 Token 中,返回给用户自行存储,因此可以看出,采用 Cookie 的话,由于所有用户都需要在服务器的 Session 中存储相对应的用户信息,所以如果用户量非常大,这对于服务器来说,将是非常大的性能压力,而Token 将用户信息返回给客户端各自存储,也就完全避开这个问题了。
四、Token的生命周期