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. 使用骨架创建maven的web工程 maven工程servlet实例之间指定web资源包 实例之导入项目依赖的jar包 maven工程servlet实例之jar包冲突解决

     使用骨架创建maven的web工程 操作一样把勾进行勾选找到webapp选项 下一步创建就行 创建好会有显示 目录结构其余的都需要自己手动补齐 有小蓝点的才是一个web项目, 如果上面都正确的话没有 ...

  2. 【IDEA】测试类(test)的模板及定义

    人和动物的区别是:能制造和使用工具.因为,工具大大便利了我们的生活. 我们在使用Idea开发java项目的过程中,有些代码是固定的,我们能不能只写几个字,就代表一连串的代码.例如,这里,我们只是输入了 ...

  3. G6-Editor 编辑器入门使用教程

    一.前言 G6-Editor 是 AntV 官方提供的.专注于图可视化编辑器的类库,也是市面上完成度较高的图可视化编辑器.然而令人诟病的是其文档对新手极度不友好,我一度怀疑此文档只有他们自己开发人员才 ...

  4. 简单的WPF客户端应用开发

    1.使用vs创建一个新项目,选择wpf应用 2.创建好项目,在视图=>工具箱,选择要使用的部件 3.单击部件可以改变部件的显示信息,即content的内容就是显示的信息,name为部件的名称,在 ...

  5. holiday12

    holiday12--linux basis super user(root) In linux, account root usually use for system maintain and m ...

  6. [OC] 链式语法

    我们新建了一个类,叫做 OJClass (这可以是 ViewController,UIView,NSObject 等各种类型的类,这里我们把它以UIView进行举例) 现在我们想要用链式语法的方式来设 ...

  7. Java-【Arrays类】和【System类】

    Arrays类 [基本介绍] JDK中提供了一个专门用于操作数组的工具类,即Arrays类,位于java util 中. 用前需导包:import java.util.Arrays; [常用方法] 返 ...

  8. eclipse中同步git代码报错checkout conflict with files

    1.Team--->Synchronize Workspace 2.在同步窗口找到冲突文件,把自己本地修改的复制出来 3.在文件上右键选择 Overwrite----->Yes , 4.再 ...

  9. Linux 三剑客常用命令

    shell三剑客===================================================grep===================================== ...

  10. vite+vue3批量导入静态资源图片;动态绑定大量图片

    vite版本:vite3:vue版本:vue3 打包上线后发现,动态绑定的图片皆失效. 单图可用 import 导入解决,但是若有大量图片,一一导入则耗时耗力. vue2+webpack 可用 req ...