【每天一小点】cookie\session\token

提问:由于http是无状态的,也就是说第一次登陆成功后,再次发送请求,服务器还是不会认识你是谁,你刚才是不是登陆过,所以我们需要设置某些标识符(登陆后才会有)对自己进行标识,等到每次发送请求的时候将这个标识带过去,这样服务器就能认识我们了。于是就有了cookie\session\token。

一、Cookie

存在于headers中,每次请求都会携带。koa中主要有maxAge(过期时间ms,默认在内存,如果设置时间就去硬盘)、domain(设置如www.baidu.com中的www)、path(默认为origin即/me可使用但是/me/name不可以)这些属性。

                            

缺点:明文传输;文件一般只有4kb;前端可以通过document.cookie更改;存放在客户端

二、Session

存在于cookie之上,但是不是明文传输。koa中主要有key(存放在cookie中的的key标识),maxAge(单位为ms),signed(默认为true,防止前端篡改,修改后再拿session为空)这些属性。

                 

存放再服务器这边比如koa中的ctx.session.user={name,id},同时再将其放在cookie上以key(session初始配置的值)-value形式存储,存在过期时间到时间就销毁,如果前端篡改后端再获取就为空。(所以说session为空不一定是登录失败或为登录还有可能是在攻击)

(ctx.session.user上已存放信息,然后通过cookie.key方式拿到value,与之对比看是不是同一个人,借助cookie验证)

缺点:存放在服务器上压力大,如果存在A服务器上,去B服务器访问就读取用户失败

于是,整合安全+存在服务器的token诞生了

三、TOKEN

JWT(json web token )由三部分组成,头部、负载、签名,所以最后生成的字符串是三个部分以点为分隔符组成,例如。

所以在KOA中,只需要自定义的密钥、payload、其他配置就可以设计出一个token。并且通过jwt.verify()的方法传入token,密钥就可以解析出payload。如果有人更改了token则会由于解析出的三项相互比较不同发现被更改,所以安全性高。但是如果密钥被泄露出去,那就可以根据推导出信息。例如,我们在用户系统通过密钥颁发token,购物系统也拥有密钥所以可以解密token来达到用户标识,但是同时它也可以颁发token伪装用户。所以颁发token应该只有用户系统拥有权限,其他验证用户的系统只能拥有token的验证权限。于是采用非对称加密。

由用户系统通过PRIVATE_KEY加密授权token,用户收到token后存入本地缓存,之后向所有网站发送请求时手动从本地缓存中取出token放入headers中送入到购物系统。购物系统根据PUBLIC_KEY打开箱子获取payload进行验证解密,如果3部分均正确则验证成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值