Token详述

1、背景

默认情况下,http是一种无状态协议,任何浏览器都能访问服务器,但是服务器并不知道是那个浏览器的,所有就有了token。

2、定义

token是加密的字符串令牌,json web token是后端加密生成的一个字符串,里面存着本次登录的相关信息,第一次登录的时候会拿前端给的用户信息去匹配数据库的数据,确认无误之后,返给前端一个token令牌,存到本地,下次登录从本地取到token返给服务器,服务器就知道是那个用户登录啦。

3、应用场景:

3.1免密登录

3.2权限控制

如果页面需要登录了才能访问,没登录跳转至登录界面,这时候只需要判断token是否有效就好,例如同一个系统的不同模块之前的权限校验。就不用跳转别的模块,还要从新登录啦。

4、时效性

鉴于安全性和SSL安全证书吊销性,都需要考虑设置有效期,同时应该兼顾用户体验感,(不能说在用户正常操作过程,token过期了,就嘎啦~~)呢到底多长时间合适呢,根据不同的场景而定。

为了解决在操作过程不能让用户感到 Token 失效这个问题,有一种方案是在服务器端保存 Token 状态,用户每次操作都会自动刷新(推迟) Token 的过期时间——Session 就是采用这种策略来保持用户登录状态的。然而仍然存在这样一个问题,在前后端分离、单页 App 这些情况下,每秒种可能发起很多次请求,每次都去刷新过期时间会产生非常大的代价。如果 Token 的过期时间被持久化到数据库或文件,代价就更大了。所以通常为了提升效率,减少消耗,会把 Token 的过期时保存在缓存或者内存中。

还有另一种方案,使用 Refresh Token,它可以避免频繁的读写操作。这种方案中,服务端不需要刷新 Token 的过期时间,一旦 Token 过期,就反馈给前端,前端使用 Refresh Token 申请一个全新 Token 继续使用。这种方案中,服务端只需要在客户端请求更新 Token 的时候对 Refresh Token 的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。当然 Refresh Token 也是有有效期的,但是这个有效期就可以长一点了,比如,以天为单位的时间。

5、工作流程

第一步: 用户发送登录请求

第二步:服务器响应token,客户端将token存储在本地(使用localStorage.setItem() 存储token)

第三步: 登录之后的所有请求,用户都需要在发送ajax请求头中发送token

6、Cookie、Session 和 Token 区别

服务器端集中存储所有人的session,token是session的key,存储在每个人的客户端手里,每次访问带着token去服务端找相应的session,获取身份,如

session在服务端就是ListMap形式存放的,遍历list拿到map,map的key就是token,value就是session。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值