包教包会——Cookie、Session、Token、JWT

news2024/12/27 12:01:58

前言

最近在做一个登陆注册的功能,这个功能要用到JWT鉴权。提到鉴权又想到自己直接学的Cookie,Session,Token。就想干脆也用一篇文章小小的概括一下。

😋😋

用文章输出这种方式来记录学习过程,并且日后可以快速进行复习

认证和授权

初学者可能经常会把认证授权混为一谈,这里就再捋一捋各自的关系。

什么是认证

  • 指的是使用用户名和密码来验证当前用户的身份,简单来说就是用户登陆。> (比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就打卡成功)* 互联网中的认证:* 用户名密码登录* 邮箱发送登录链接* 手机号接收验证码* 只要你能收到邮箱/验证码,就默认你是账号的主人什么是授权

  • 指当用户登陆以后,当前用户是否有足够的权限访问特定的资源。> 你在访问微信小程序时,当登录时,小程序会询问是否允许授予权限(获取昵称、头像、地区、性别等个人信息)* 实现授权的方式有:cookie、session、token、OAuthCookie


为什么会出现Cookie

HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息):每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次的发送者是不是同一个人。所以服务器与浏览器为了进行会话跟踪(知道是谁在访问我),就必须主动的去维护一个状态,这个状态用于告知服务端前后两个请求是否来自同一浏览器。而这个状态需要通过 cookie 或者 session 去实现。

创建 Cookie

当接收到客户端发出的 HTTP 请求时,服务器可以发送带有响应的 Set-Cookie 标头,Cookie 通常由浏览器存储,然后将 Cookie 与 HTTP 标头一同向服务器发出请求。

看下面这个例子

Set-Cookie HTTP 响应标头将 cookie 从服务器发送到用户代理。

现在,随着对服务器的每个新请求,浏览器将使用 Cookie 头将所有以前存储的 Cookie 发送回服务器。

Session

什么是Session

  • session 是另一种记录服务器和客户端会话状态的机制
  • session 是基于 cookie 实现的,session 存储在服务器端,sessionId 会被存储到客户端的cookie 中

Session认证流程

  • 用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 Session* 请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器* 浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名* 当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。根据以上流程可知,SessionID 是连接 Cookie 和 Session 的一道桥梁,大部分系统也是根据此原理来验证用户登录状态。

Token

什么是Token

  • 访问资源接口(API)时所需要的资源凭证
  • 简单 token 的组成: uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token 的前几位以哈希算法压缩成的一定长度的十六进制字符串)

Token 的身份验证流程

  • 客户端使用用户名跟密码请求登录* 服务端收到请求,去验证用户名与密码* 验证成功后,服务端会签发一个 token并把这个 token 发送给客户端* 客户端收到 token 以后,会把它存储起来,比如放在 cookie 里或者 localStorage 里* 客户端每次向服务端请求资源的时候需要带着服务端签发的 token* 服务端收到请求,然后去验证客户端请求里面带着的 token ,如果验证成功,就向客户端返回请求的数据JWT

什么是JWT

JSON Web Token(简称 JWT)是目前最流行的跨域认证解决方案。

JWT的认证流程

  • 第一步,用户登陆,用户通过用户名和密码登陆,如果登陆成功,服务器就会返回一个加密文档,这个文档就是jwt,其中包含除了用户密码以外的全部的认证信息,包括用户名、email、角色、权限等等,而客户端在拿到jwt以后就可以把它保存起来了,可以保存cookie中,也可以保存在LocalStorage里面,而生成jwt以后不需要在服务器上保存。
  • 第二步,用户需要访问某些资源,这个时候用户需要把jwt放在http请求header中,与http请求一同发送给服务器。服务器取得jwt以后,会使用自己的私钥来给给jwt文档解密,如果解密成功而且数据依然有效,则代表用户已经登陆了,如果jwt所描述的用户权限允许该用户访问资源,服务器就会把资源信息通过http响应发送回到客户端

什么时候用JWT

那么在真实工作中,我们要不要使用jwt呢? 考虑一下下面的场景,大家应该都用过学校的学生系统吧,学生登录系统以后可以使用这个系统选课、查成绩什么的,如果现在学校又新建了一个图书馆系统,而且学校希望这个系统可以无缝衔接学生系统,使用同一套账户,在学生系统中登录以后就能直接进入图书馆系统。使用传统的session验证方式,必须在学生系统和图书馆系统都各自创建一套session才能实现登录,而各自的session无法形成有效的联系,所以在最底层创建一个单点登录系统,不管学生访问哪个系统,都会连接到单点登录系统进行session的验证,当学生的登录信息验证成功以后,单点登录系统会做一个重定向,把流量引导至相应的系统中。这样就可以实现这学生系统和图书馆系统的无缝连接。

但是,单点登录系统在使用分布式部署的时候又要考虑不同的服务器之间session的一致性,从而导致系统架构非常复杂。

如果学校在建设学生系统的时候使用的是jwt,那么想要拓展系统简直就是易如反掌。因为jwt不会保存在服务器上,所以服务器如何部署完全不会影响到jwt的使用。学生登录完成以后,把jwt信息保存在浏览器中,需要访问学习系统或图书馆系统的时候,会向服务器发送带有jwt的请求,学生系统和图书馆系统只需要使用相同的私钥来验证token,验证成功以后,就可以通过token中用户的权限给不同的用户输出不同的数据。

  • 首先,无状态登录,简化服务器的用户验证流程,同时完美支持分布式部署。
  • 第二,使用非对称加密,只要私钥不泄露,可以保证token是绝对安全的。

不过,jwt也有两个非常明显的缺点,

  • 第一,jwt token一经发布就无法挽回了,因为具有无状态的特征,所以在带来便利的同时也无法被服务禁用,也就是说,如果用户自身因为某些原因导致token被黑客窃取,那么黑客就可以使用这个token来伪装登录,而服务端对此没有任何办法,只能等待token过期失效。
  • 第二,jwt的前两个部分其实并没有加密,仅仅使用了base64来编码而已,也就是说jwt的用户信息等于是明文传递的,很容易造成用户的信息泄露。

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识Node.js与内置模块

文章目录目标一、初识 Node.js1、回顾与思考(1)已经掌握了哪些技术(2)浏览器中的 JavaScript 的组成部分(3)思考:为什么 JavaScript 可以在浏览器中被执行(4)思考&#x…

Python图像处理【6】通过哈希查找重复和类似的图像

通过哈希查找重复和类似的图像0. 前言1. 哈希函数2. 使用哈希函数查找重复图像3. 使用感知哈希函数查找相似图像3.1 感知哈希函数3.2 查找相似图像4.3 查找指定目录中的相似图像小结系列链接0. 前言 在本节中,我们将讨论图像搜索中的两个相关问题,即使用…

node.js+uni计算机毕设项目贵州苗族文化展播微信小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

IP多播(计算机网络-网络层)

目录 一对多通信的应用需求 单播 vs 多播 多播路由器(Multicast Router) IP 多播的一些特点 D 类 IP 地址与以太网多播地址的映射关系 IP多播需要两种协议 互联网组管理协议 IGMP 多播路由选择协议 两种多播路由选择方法 建议的IP多播路由选择协…

后渗透操作(一)

在通过木马或者漏洞获得靶机的远程控制权后接下来就是后渗透的过程了,meterpreter可以看作一个支持多操作平台的高级后门工具,可以实现特权提升、信息攫取、系统监控、跳板攻击与内网拓展等多样化的功能特性。 一、访问文件系统 对于文件系统的访问有如…

腾讯云轻量应用服务器使用Typecho 应用镜像搭建博客!

Typecho 是开源的博客建站平台,具有轻量、高效、稳定等特点,操作界面简洁友好。该镜像基于 CentOS 7.6 64 位操作系统,并已预置 Nginx、PHP、MariaDB 软件。您可以使用它快速搭建博客、企业官网、电商、论坛等各类网站。 操作步骤 登录 轻量…

博士毕业论文答辩PPT的基本要点

博士毕业论文答辩PPT的基本要点 有借鉴和参考价值的地址或链接: 1、https://blog.csdn.net/lwz45698752/article/details/106648720 研究背景及研究意义 研究内容 总结以研究成果 里边的配色、结果展示的方式很值得借鉴,看起来重点突出&#xff0c…

【Pandas入门教程】如何轻松处理时间序列数据

如何轻松处理时间序列数据 来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html 笔记托管:https://gitee.com/DingJiaxiong/machine-learning-study 文章目录如何轻松处理时间序列数据导包数据准备【…

RV1126笔记十八:吸烟行为检测及部署<五>

若该文为原创文章,转载请注明原文出处。 ubuntu16.04上搭建转化成RKNN环境并把onnx转成RKNN模型(ubuntu16.04) onnx模型转rknn模型需要用到py3.8,所以搭建环境在转换,下面全部操作都是虚拟机下进行。 注意:转模型用py3.6, 训练用py3.8 一、miniconda安装 1、下载地址…

tensorflow01——安装,结构

从官网安装anaconda 安装tensorflow 注意tensorflow对应特定的python版本如3.6,3.7 直接从官网下载的anaconda会对应下载最新版本的python3.9 所以需要新建一个环境来装我们的tensorflow和它对应的python (macbook m2) 01创建新的环境命名…

【详细说明】二代身份证号码的组成结构(含校验码算法与行政区划代码)

文章内容:二代身份证号码的组成结构(含校验码算法与行政区划代码) 关键词组:身份证号码、组成、校验码、行政区划码 使用软件:无 虚拟环境:无 操作系统:Windows 11 【图源中国政府网】 文章目录…

node.js+uni计算机毕设项目广播剧微信小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

Node.js - 模块化

文章目录目标一、模块化的基本概念1、什么是模块化(1)现实生活中的模块化(2)编程领域中的模块化2、模块化规范二、Node.js 中模块化1、Node.js 中模块的分类2、加载模块3、Node.js 中的模块作用域(1)什么是…

创新!京东T7开创“新算法宝典”,图文并茂,全新演绎,太酷了

导言 算法是一门学问,但却总遭到一些程序员的冷落。现在的开发人员,更热衷于编程语言的修炼,以应付面试需求时的需要,所以对算法的学习,稍许忽略了些。实际上,近些年来,各互联网公司对于算法的…

画出一阶系统单位阶跃响应、单位脉冲响应、单位斜坡响应曲线

画出一阶系统单位阶跃响应、单位脉冲响应、单位斜坡响应曲线 t0:0.1:7; num[1]; den[1 1]; figure; c1impulse(num,den,t); plot(t,c1,‘b-’); xlabel(‘t/s’);ylabel(‘c(t)’);grid on; figure; c2step(num,den,t); plot(t,ones(size(t)),‘r-’,t,c2,‘b-’); xlabel(‘t…

Java中File文件操作类的详细使用介绍

文章目录File类的使用File的介绍File常用API判断文件类型-获取文件信息创建文件-删除文件功能遍历文件夹File类的使用 File的介绍 File的概述: File类在包java.io.File下、代表操作系统的文件对象(文件、文件夹)。 File类提供了诸如:定位文…

神级框架 - MyBatis【进阶】

目录 1. 单表查询的进阶知识 1.1 参数占位符 #{} 和 ${} 的区别 1.1.1 #{} 和 ${} 的区别一 (#{} 胜一分) 1.1.2 #{} 和 ${} 的区别二 (${} 胜一分) 1.1.3 #{} 和 ${} 的区别三 - 最主要的区别 (${} 惨败) 1.2 like 查询 2. 多表查询的进阶知识 2.1 查询的返回类型: res…

node.js+uni计算机毕设项目基于微信平台的小龙虾养殖管理程序设计(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

【Lilishop商城】No4-1.业务逻辑的代码开发,涉及到:会员B端第三方登录使用及后端接口(微信、QQ等)

仅涉及后端,全部目录看顶部专栏,代码、文档、接口路径在: 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑,其中重点包括接口类、业务类,具体的结合源代…

Mycat2(二)windows搭建mycat2、mycat2相关概念、配置文件解释

文章目录windows搭建mycat2步骤下载mycat2修改配置并启动mycat2命令mycat2相关概念mycat2配置文件用户相关配置属性数据源datasources集群cluster相关配置逻辑库表schemas配置windows搭建mycat2步骤 修改C:\Windows\System32\drivers\etc下的hosts文件,防止dns污染…