接口鉴权之cookie,session,token
一:鉴权
鉴权是指验证用户是否拥有访问系统的权利--鉴定权限
二:cookie,session,token由来
以前的web基本都是文档的浏览,服务器不需要记录信息,所以无状态协议http足够应对(本次请求和上一次请求没有关系,不能共享信息),现在的web要求比如登录才能查看信息,所以就有了会话标识(sessionid) ,用来解决共享信息的问题, 当然session是基于cookie实现的。
服务器为每个用户生成一个不一样的随机字符串, 每次向服务器发起HTTP请求的时候, 把这个字符串给传给服务器。这样就能区分谁是谁了。
三:cookie
可以F12去看看cookie,可以理解为一个文件,存在硬盘上(浏览器安装路径下)
好处:对服务端没什么压力,因为是存在本地的
四:session(会话)
session:是在和服务器打交道后产生的,比如登录成功后
第一步:登录成功后,服务器会生成sessionId存在服务器中(相当于锁)
第二步:服务器要把sessionId以Cookie的形式回写到客户端(相当于钥匙)
第三步:就是客户端,比如要访问个人资料,那请求中就要带着这个Cookie,如果正确,那就运行访问(相当于拿钥匙去开锁)
接口鉴权session解决方案:
完成登录之后, 获取带有session信息的cookie, 再次请求时加入。
可以使用postman工具,比如我登录成功了,可以在这里拿cookie值去使用,要去访问个人资料接口,在头里面带这个值就行了
session缺点:
虽然session解决了共享信息的问题, 但同时对于服务器带来了其他问题---资源开销。对于客户端来说session是非常好的, 只需要cookie中存一个字符串就行了, 但是服务器必须存储所有在线的用户session, 那么这是很大一笔开销(cpu, 内存) , 严重影响了服务器的性能。这时可以选择去扩展服务器做集群, 但同时也出现分布式session问题, 那么可以采用session粘滞或者session集中式管理(red is) 来解决。
五:token
出来较晚,主要是解决服务器压力的问题(因为sessionId占内存,达到一定量级服务器会卡顿)
第一步:生成的token不存在服务器
第二步:把token返回给客户端,可以理解为钥匙和锁(都在token里面)都一起返回给客户端了
第三步:请求的时候带上toekn,服务器会验证这个钥匙和锁是不是有效的,有效就允许访问,无效就不行
token的组成
可以理解1是钥匙,2是锁,这个签名是1(头,用户Id(这个看业务))生成的
因为1有可能会被篡改,这里就是拿1通过算法再生成一个签名(锁),如果这个签名和2一致,说明是正确的
接口鉴权token解决方案:
完成登录之后,获得token字符串,再次请求时加入
六:cookie和session的区别
七:session和token区别