JWT令牌

一、JWT(Json Web Token)能干什么

1、安全认证(权限认证)

比如登录系统的时候,服务器会检查前端请求数据中携带的token信息,符合标准则允许访问,不符合则拒绝你的访问请求。

2、信息传递

比如两个系统之间传递信息,a服务器向B服务器发送token信息,b服务器对token进行解签名,发现签名对的上就接收数据,对不上就拒绝a服务器发来的数据(访问)。

二、JWT组成

头(header).负载(payload).签名(signature)

头、负载、签名三个部分组成,并用点符号衔接。

头:放签名用的加密算法

负载:一些不敏感的用户信息,通过base64编码放在负载中

签名:头+负载+加密后的签名(也称密钥)

三、为什么要用Session或JWT认证机制?

因为HTTP是无状态的网络协议,比如,一套系统势必会存在很多次请求,而你的每一次请求服务器都不知道一个个请求是你发送的还是别人发送的,就会造成你已经登录成功进入页面搜索某个东西点击确认发送了一个搜索数据的请求,然而服务器已经不记得你是谁、是否登录成功,然后听都不听你的请求就被服务器关在门外了,因此你的每一次亲求都要进行一次身份验证,但总不能每发送一次请求都要输入一遍账户密码来验证你是具备请求权限的吧?所以你再一次登录请求成功的时候就给你发一张“通行证”,后面同一个系统内部的请求都带上这张“通行证”表示你在这个系统中有相应的权限,人后尽管说出你的请求,服务器看到你的“通行证”“心领神会”“理所当然”接受你的请求,然后根据你的请求在“能力范围内”响应你的请求。

三、Session和JWT认证机制的区别、优缺点

1、Session流程

客户端第一次向服务器发送请求验证身份,身份验证通过,服务器生成JSESSIONID,放在cookie身上响应给客户端浏览器,浏览器吧cookie保存在浏览器中,下次请求时,找到对应的cookie,放在请求头一并发送到服务器,服务器根据cookie信息验证身份,验证成功查看你的请求作出响应。

2、Session缺点

[1]每当一个用户第一次发送请求生成sessionid,sessionid就会被存储在服务器内存中,当请求用户增多,服务器开销随之变大;

[2]某一用户第一次发送请求,生成的sessionid存储后,该用户以后发送的每一次请求都只能到特定服务器中申请访问资源,不利于分布式负载均衡

[3]sessionid是通过cookie传送哎浏览器和服务器之间来回传送的,容易被跨站请求伪造攻击

[4]前后端分离项目,不易部署;同一个系统需要发送很多个请求,而session、cookie认证技术并没有减少每次都要进行搜索用户信息进行身份认证的动作

3、JWT认证流程

浏览器第一次向服务器发送请求的时候,服务器生成一个令牌,之后这个令牌不再保存在服务器中,而是在保存在客户的浏览器中,释放服务器的内存。往后客户只需要携带令牌请求数据就可以了,而且服务器只用判断令牌是否有效就行了。也就是说JWT中有客户信息,解码后获取用户信息直接验证权限,不用额外再去数据库查用户信息、比对来验证用户权限。另外token会被存在浏览器的sessionStorage或者local Storage中,当系统退出登录的时候token就会被删除释放浏览器内存。

另一番理解:header

cookie:将用户信息(如账号、角色信息,不包括密码等敏感信息)以明文 方式存储在浏览器中,服务器直接根据header携带的信息验证用户身份。相对于session缺乏安全性。

session:给一个id给cookie,服务器根据这个id查询数据库验证用户身份。相对安全。

JWT:将用户信息以base64编码(字符串)给cookie存储在用户浏览器,服务器获取header中的Authorization或URL或cookie中携带的token中的解码+解签名之后的用户信息,进行用户验证。相对于session缺乏安全性。

4、JWT优势

[1]token本身就有用户信息。只需要解密就可以直接获得用户信息数据,而不用再取数据库查询数据了,简单的查询还好就怕复杂数据地查询。

[2]保存在用户浏览器中,释放服务器的部分内存压力

5、JWT缺点

[1]token在传输的过程中有被截获,被人拿去冒充用户请求内部数据的风险:

1、不安全的存储方式:一些开发人员可能会把token存储在local storage、cookie、URL参数等不安全的位置,容易被攻击者获取到。

2、使用http协议传输token:http协议是明文传输,攻击者可以通过中间人攻击截获token。

3、token窃取过程中的漏洞:部分应用程序没有对用户输入做充足的过滤和检查,攻击者可以通过在输入框中注入特定代码来盗取token

[2]一旦签发一个jwt,在到期之前就会始终有效,无法中途废弃。例如你在payload中存储了一些信息,当信息需要更新时,则重新签发一个jwt,但是由于旧的jwt还没过期,拿着这个旧的jwt依旧可以登录,那登录后服务端从jwt中拿到的信息就是过时的。为了解决这个问题,我们就需要在服务端部署额外的逻辑,例如设置一个黑名单,一旦签发了新的jwt,那么旧的就加入黑名单(比如存到redis里面),避免被再次使用。

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

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

相关文章

laravel框架 - 事件与监听器

一,绑定事件与监听器 在app\Providers下的EventServiceProvider.php中添加我们定义的事件与监听器 protected $listen [Registered::class > [SendEmailVerificationNotification::class,],App\ebvent\RegisterMessage>[//事件App\listeners\SendMessage//监…

高云FPGA系列教程(10):letter-shell移植

文章目录 letter-shell简介letter-shell源码获取letter-shell移植函数和变量应用示例 本文是高云FPGA系列教程的第10篇文章。 shell,中文是外壳的意思,就是操作系统的外壳。通过shell命令可以操作和控制操作系统,比如Linux中的Shell命令就包括…

QT--day5

注册 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include<QPushButton> #include<QLineEdit> #include<QLabel> #include <QMessageBox> #include<QString> #include<QSqlDatabase> …

CAN总线物理层

本文的目的并不是为了介绍或普及CAN总线相关知识,而是为了了解CAN总线,进而为CAN通信一致性测试做知识储备。 CAN,控制器局域网,全称:Controller Area Network。1986年,由德国Bosch公司为汽车开发的网络技术,主要用于汽车的监测与控制,目的为适应汽车“减少线束的数量…

1787_函数指针的使用

全部学习汇总&#xff1a;GitHub - GreyZhang/c_basic: little bits of c. 前阵子似乎写了不少错代码&#xff0c;因为对函数指针的理解还不够。今天晚上似乎总算是梳理出了一点眉目&#xff0c;在先前自己写过的代码工程中做一下测试。 先前实现过一个归并排序算法&#xff0c…

1999-2018年地级市不同所有制成分工业总产值数据

1999-2018年地级市不同所有制成分工业总产值数据 1、时间&#xff1a;1999-2018年 2、范围&#xff1a;地级市 3、指标&#xff1a;行政区划代码、城市、年份、规模以上工业企业数_全市_个、规模以上工业企业数_市辖区_个、规模以上内资企业数_全市_个、规模以上内资企业数_…

【AI视野·今日CV 计算机视觉论文速览 第250期】Wed, 20 Sep 2023

AI视野今日CS.CV 计算机视觉论文速览 Wed, 20 Sep 2023 Totally 95 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers PanopticNeRF-360: Panoramic 3D-to-2D Label Transfer in Urban Scenes Authors Xiao Fu, Shangzhan Zhang, Tianrun Chen…

满足开闭原则的JDBCUtils~

我们都知道开闭原则即为对修改关闭&#xff0c;对拓展开放&#xff0c;那么对于实现既能通过DriverManager连接数据库&#xff0c;也能实现使用c3P0连接数据库&#xff0c;连接数据库的方式即为可变点&#xff0c;我们只需要使用抽象类或者接口封装可变点&#xff0c;再将可变点…

ip地址的正则表达式

ip地址的正则表达式 checkIpSpecial: {// 验证IP地址validator: function (value) {// var reg /^((1?\d?\d|(2([0-4]\d|5[0-5])))\.){3}(1?\d?\d|(2([0-4]\d|5[0-5])))$/;这个正则表达式的意思是&#xff1a;以数字开头&#xff0c;紧接着是一个点&#xff0c;然后再是数…

SecureCRT SSH与FTP连接中文乱码

1、首先要保证服务端环境变量是UTF-8编码的 LANG”zh_CN.UTF-8″ 2、会话里面配置好字符编码&#xff1a;UTF-8 SSH会话的窗口就可以正常显示中文了&#xff0c;效果如下 3、打开FTP或者SFTP时进行文件传输时&#xff0c;列表窗口里面还是乱码&#xff0c;需要把SecureCRT安…

猜数游戏 rust解法

给定答案序列和猜测序列&#xff0c;统计有几个数字位置正确&#xff0c;有几个数字在两个序列都出现过但位置不对。 输入包含多组数据。每组第一行是序列长度n&#xff0c;第二行是答案序列&#xff0c;接下来若干行是猜测序列。猜测序列全0时该组结束。n0时整个输入结束。 样…

【知识分享】Java获取当前日期是第几周且本周是几号到几号

加哥今天给大家提供一个获取当前日期是本年度的第几周的方法&#xff0c;且这周是几号到几号的工具类&#xff0c;供大家使用。 public static void main(String[] args) {//使用当前时间戳 System.currentTimeMillis()Current_week(System.currentTimeMillis()); }public st…

周界警戒AI算法+视频智能分析在安全生产场景中的应用

长期以来&#xff0c;周界防范安防系统在大型园区、工厂、社区、机场、火车站站台、重点单位等领域应用较为广泛和常见。随着AI人工智能等新兴技术的快速发展与落地应用&#xff0c;通过AI智能检测与视频智能分析技术&#xff0c;现代化的周界安防系统可以做到全天候快速、准确…

科普:什么是视频监控平台?如何应用在场景中?

随着科技的发展&#xff0c;监控无处不在&#xff0c;就像一张密不透风的网&#xff0c;将生活中的角角落落都编织在一起。可是&#xff0c;你真的知道什么是安防视频监控平台吗&#xff1f;它可不止是一个简单的通电摄像头&#xff0c;如今的视频监控平台&#xff0c;涵盖了无…

Python爬虫基础(三):使用Selenium动态加载网页

文章目录 系列文章索引一、Selenium简介1、什么是selenium&#xff1f;2、为什么使用selenium3、安装selenium&#xff08;1&#xff09;谷歌浏览器驱动下载安装&#xff08;2&#xff09;安装selenium 二、Selenium使用1、简单使用2、元素定位3、获取元素信息4、交互 三、Phan…

Tomcat的启动问题

今天去打开Tomcat的时候没反应 如下 按之前是到Tomcat目录下的bin目录下的startup.bat文件&#xff0c;双击&#xff0c;就可以启动Tomcat服务器。启动后可以 打开浏览器&#xff0c;在浏览器地址栏中输入以下地址测试&#xff1a; 1、http://localhost:8080 2、http://127.…

c: Sorting Algorithms

SortAlgorithm.h /*****************************************************************//*** \file SortAlgorithm.h* \brief 业务操作方法* VSCODE c11 https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/2.selectionSort.md* https://www.programiz.com/d…

35.肥皂泡动画效果

特效 源码 index.html <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Animated Soap Bubbles</title> <link rel="stylesheet" typ…

CSS中去掉li前面的圆点方法

1. 引言 在网页开发中&#xff0c;我们经常会使用无序列表&#xff08;<ul>&#xff09;来展示一系列的项目。默认情况下&#xff0c;每个列表项&#xff08;<li>&#xff09;前面都会有一个圆点作为标记。然而&#xff0c;在某些情况下&#xff0c;我们可能希望去…

ubuntu 22.04 服务器网卡无IP地址

ssh连接服务器连接不上&#xff0c;提示如下&#xff1b; 连接显示器&#xff0c;ip addr ls 命令查看IP地址&#xff0c;有网卡但没有IP地址 solution&#xff1a; sudo dhclient enp10s0用于通过 DHCP 协议获取网络配置信息并为名为 enp10s0 的网络接口分配 IP 地址,enp1…