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. 【Java】无法将java.util.LinkedHashMap强制转换为X

    JsonJack:无法将java.util.LinkedHashMap强制转换为X 1. 概述 Jackson是一个广泛使用的Java库,它使可以方便地对JSON或XML进行序列化/反序列化.有时,当 ...

  2. gash 支付方式

    首先客服人员会提供相应的支付demo代码,可根据此来处理 值得说的是 每次支付成功后 他会主动给你在后台设置的回调地址发送信息  你也要相应的返回对应的信息  发送过来的密文 有时会解密失败 可根据他 ...

  3. Linux非正式学习随笔(1)

    11.5进linux学的第一件事,找个中文输入法.Linux是一套免费的类unix操作系统GPL:gnu通用公共许可证.托马斯斯托曼提出gnu计划,自由软件思想的一个协议.Linux诞生1991年10 ...

  4. oracle相关知识

    1. 给表字段添加注释的语法 comment on column 表名.字段名 is '注释信息'; 2. 数据库字段重命名 alter table ORGAN_PARTER_EXT_TWO rena ...

  5. Debug --> CICFlowMeter的java版本安装及使用

    一. 首先,给出一个很详细的配置链接!使用IDEA进行配置~ https://blog.csdn.net/BananaMan45/article/details/105473151?utm_mediu ...

  6. Linux下查看全部的环境变量

    在Windows下,查看环境变量的命令是:set,这个命令会输出系统当前的环境变量. ... Linux查看环境变量使用env命令显示所有的环境变量 $ env

  7. sql-labs less34--less41

    less 34 汉 addslashes() 函数返回在预定义的字符前添加反斜杠的字符串. 预定义字符是: 单引号(') 双引号(") 反斜杠(\) NULL 提示:该函数可用于为存储在数据 ...

  8. Falsk 大文件上传/下载(send_from_directory)

    下载接口: 服务端flask下载接口 @app.route("/api/download/", methods=["POST"]) def download() ...

  9. Navicat Premium 12 安装破解过程 (经过测试)

    @ 目录 下载安装 下载 解压文件目录 安装使用步骤截图 1. 安装navicat120_premium_cs_x64.exe 软件 2. 解压Navicat.Premium 破解补丁.rar 3. ...

  10. CORS(cross origin resource sharing)

    1.什么是CORS 定义:跨域资源共享. 2.什么是跨域资源共享 允许浏览器可以从当前源服务器通过ajax访问另外一个源服务地址. 3.同源策略 是浏览器的一个安全功能,不同源的客户端脚本在没有明确的 ...