token解决cookie的弊端

cookie的弊端

  • 弊端一:浏览器请求过服务器后,下一次访问时服务器就会通过浏览器cookie中携带的sessionID去寻找对应session,但是如果服务器做了负载均衡,用户下一次请求可能会被定向到其他服务器节点,那台服务器上没有用户session信息,就会导致验证失败,所以session默认机制下不适合做分布式部署。其实可以将session集中存储在同一个地方,所有服务器都去这里去访问,但增加了单点失败的可能性。如果负责存储session的机器出现问题,所有人都要重新登录。
  • 弊端二:cookie安全性较低。

token解决弊端一

什么是token和JWT

token:简单说就是服务器给浏览器发了一枚令牌,以后带着令牌过来就能随便访问。

JWT:全称 JSON Web Tokens ,是一种规范化的 token。

JWT的构成

它是一个字符串,由头部、载荷与签名三部分构成,两两之间用.分隔。

头部(Header):一般存放令牌类型和签名(加密)算法类型。将其用Base64Url进行编码。

载荷(Payload):包括签发人、生效时间、编号等信息。将其用Base64Url进行编码。

签名(Signature):将前两部分编码过的字符串用指定的签名算法和服务器提供的密钥进行加密得到签名。

token工作流程

  1. 用户通过用户名及密码进行登录验证。
  2. 服务器验证成功后生成token将其返回给浏览器。
  3. 浏览器可以将其存储在cookie中(也可以存储在其他地方),在以后访问中将token添加到http请求的header中。
  4. 服务器通过token中前两部分内容及服务器存储的密钥再次加密,然后与token中的签名进行核对,相同说明已登录。

这样一来,服务器不用保存每个用户的session,只需要保存一段密钥。token由用户自己保存。

token解决弊端二

CSRF攻击

CSRF(Cross-site request forgery),即跨站请求伪造。

举例:我去访问A网站,服务器给了我cookie,我又去访问B网站,有人在B网站中放入了一个来自A网站的链接,点击后会执行一些非我本意的操作,我点击后浏览器带着我的cookie去请求,服务器误以为就是我想来执行这些操作,于是就凉凉了。

token防止CSRF

浏览器请求时会默认携带cookie,但不会直接携带token。

还有人说cookie中不是也可能存有token吗,那cookie被劫持和token被劫持有什么区别?CSRF的原理是冒用别人的cookie去欺骗服务器,但不能获取到cookie中的信息。所以即便cookie被劫持,但cookie本身不参与验证,只是起到存储作用,用于验证的token必须添加到http的header中。

token解决cookie的弊端的更多相关文章

  1. Token ,Cookie和Session的区别

    在做接口测试时,经常会碰到请求参数为token的类型,但是可能大部分测试人员对token,cookie,session的区别还是一知半解. Cookie cookie 是一个非常具体的东西,指的就是浏 ...

  2. Token ,Cookie、Session傻傻分不清楚?

    作者 | 王菜鸟1993 来源 | cnblogs.com/JamesWang1993/p/8593494.html 在做接口测试时,经常会碰到请求参数为token的类型,但是可能大部分测试人员对to ...

  3. Token 、Cookie和Session的区别

    本文转至http://blog.csdn.net/tobetheender/article/details/52485948 https://blog.csdn.net/axin66ok/articl ...

  4. 关于Token和Cookie做权限校验的区别及Token自动续期方案

    title: 关于Token和Cookie做权限校验的区别及Token自动续期方案 categories: 后端 tags: - .NET Token和Cookie的区别 首先,要知道一些基本概念:h ...

  5. 解决cookie跨域访问

    一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...

  6. 解决cookie跨域访问.2

    v一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入 ...

  7. 七、vue中将token存到cookie

    使用js-cookie工具: 1.npm i js-cookie //安装2.import Cookies from 'js-cookie' //引用 // 存入cookie:Cookies.set( ...

  8. 前后端分离 token和cookie对比

    HTTP协议本身是无状态的,所以需要一个标志来对用户身份进行验证 1.cookie 用户登录成功后,会在服务器存一个session,同时发送给客户端一个cookie,这个cookie里面有唯一标识该用 ...

  9. Token ,Cookie和Session的区别--学习笔记

    http://blog.csdn.net/tobetheender/article/details/52485948 Token token的意思是“令牌”,是用户身份的验证方式,最简单的token组 ...

  10. 进阶——scrapy登录豆瓣解决cookie传递问题并爬取用户参加过的同城活动©seven_clear

    最近在用scrapy重写以前的爬虫,由于豆瓣的某些信息要登录后才有权限查看,故要实现登录功能.豆瓣登录偶尔需要输入验证码,这个在以前写的爬虫里解决了验证码的问题,所以只要搞清楚scrapy怎么提交表单 ...

随机推荐

  1. ffmpeg将常见视频格式转换为mp4

    1,avi.mkv.mp4等格式转为mp4 ffmpeg -i 1.avi -c copy 1.mp4 2,wmv.asf等格式转为mp4 ffmpeg -i 1.asf 1.mp4

  2. NTP时钟服务器(时间同步服务器)在大数据时代的重要性

    NTP时钟服务器(时间同步服务器)在大数据时代的重要性 NTP时钟服务器(时间同步服务器)在大数据时代的重要性 技术交流:岳峰 15901092122 bjhrkc@126.com    大数据时代众 ...

  3. POJ 1830 开关问题 异或高斯消元

    题目链接 将题目转化为矩乘问题 构建一个 \(n \times n\) 的开关信息矩阵,其中第 \(i\) 列第 \(j\) 行的元素为 \(0 / 1\) 代表在改变开关 \(i\) 的情况下开关 ...

  4. Docker部署OpenWRT-旁路由

    1.确认网卡名称 命令 ip addr 显示如下图的 enp2s0 就是我们准备进行链接的网卡名称. 2.打开网卡的混杂模式 sudo ip link set enp2s0 promisc on 3. ...

  5. Kubernetes--创建Ingress资源

    创建Ingress资源 Ingress资源是基于HTTP虚拟主机或URL的转发规则,它在资源配置清单的spec字段中嵌套了rules.backend和tls等字段进行定义.下面的示例中定义了一个Ing ...

  6. 使用C++进行冒泡排序

    #include "pch.h" #include <iostream> using namespace std;手动输入10个数,进行冒泡排序 int main() ...

  7. CMD Debug大全

    'service' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 先看环境变量配置是否到位,再使用管理员运行cmd

  8. Python跳一跳小游戏

    一:准备工具 adb 驱动   下载链接:http://adbshell.com/upload/adb.zip 安卓手机 打开手机调试模式 usb线接好手机和电脑 PyCharm:专门用于Python ...

  9. linux 中的errno 和 strerror(errno)

    1. errno.h 中包含 errno 这个错误保存值 string.h 包含 strerror() 函数 ,它的原型 是 char *strerror(int errnum); 输入值应该是err ...

  10. 2020.3.9 ~ 2020.3.15 ACM训练周总结

    一.本周ACM学习相关内容 学习了dfs和bfs -- 4小时 课上系统的学习了vector等stl函数的使用即注意事项-3小时 二.题数与耗时 师哥安排了12道题,做了五道(不包含比赛题):大概4个 ...