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里面),避免被再次使用。
相关文章:
JWT令牌
一、JWT(Json Web Token)能干什么 1、安全认证(权限认证) 比如登录系统的时候,服务器会检查前端请求数据中携带的token信息,符合标准则允许访问,不符合则拒绝你的访问请求。 2、信息传递 比…...
uni-app使用CSS实现无限旋转动画
本来想用uni.createAnimation创建一个旋转动画,发现转完一圈后就不动了,没法循环旋转, 后来又用setInterval每隔一个周期就把旋转角度加180度,发现运行一段时间后动画逐渐崩坏,应该是动画的周期和定时器的周期时间没有…...
java面向对象(八)
文章目录 一、abstract关键字的使用1.概念2. abstract修饰类:抽象类3.abstract修饰方法,抽象方法4.abstract使用上的注意点:5.抽象类的匿名子类 二、计算一段代码执行所花费的时间三、接口的使用1.接口的使用2.定义接口中的成员3.代码demo4.Java类可以实…...
【proverif】proverif的下载安装和初使用
文章目录 一、proverif下载1. 下载proverif安装包2. 解压proverif安装包3. 点开其中的README,安装graphciz和gtk4. 查看安装是否成功5. 测试 一、proverif下载 1. 下载proverif安装包 官网:proverif 首先下载全过程无需开外网,而且安装包下…...
浙江大学《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作——2023学生开学季辉少许
浙江大学《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作——2023学生开学季辉少许...
Centos7.9 一键脚本部署 LibreNMS 网络监控系统
前言: LibreNMS 是个以 PHP/MySQL 为基底的自动探索网络监控系统 LibreNMS 官网 版本23.8.2-52-g7bbe0a2 - Thu Sep 14 2023 22:33:23 GMT0700数据库纲要2023_09_01_084057_application_new_defaults (259)Web 服务器nginx/1.20.1PHP8.1.23Python3.6.8DatabaseMa…...
【大数据之Kafka】十六、Kafka集成外部系统之集成Flume
Flume 是一个在大数据开发中非常常用的组件。可以用于 Kafka 的生产者,也可以用于 Kafka 的消费者。 Flume安装和部署:https://blog.csdn.net/qq_18625571/article/details/131678589?spm1001.2014.3001.5501 1 Flume生产者 (1)…...
java学习--day3 (运算符、if循环、switch-case结构)
文章目录 今天的内容1.运算符1.1关系运算符1.2逻辑运算符1.3逻辑运算符的短路原则 2.分支结构【重点】2.1if分支2.2if-else分支2.3if-else的嵌套写法2.4if-else if 分支结构2.5swicth-case结构 扩展知识点 1.八大基本数据类型整型: byte short int long浮点: float double字…...
ActiveMQ、RabbitMQ、RocketMQ、Kafka区别
一、消息中间件的使用场景 消息中间件的使用场景总结就是六个字:解耦、异步、削峰 1.解耦 如果我方系统A要与三方B系统进行数据对接,推送系统人员信息,通常我们会使用接口开发来进行。但是如果运维期间B系统进行了调整,或者推送…...
csp初赛总结 那些年编程走过的坑 初高中信竞常考语法算法点
😘个人主页:曲终酣兴晚的小书屋💖 😕作者介绍:一个莽莽撞撞的🐻 💖专栏介绍:日常生活&往事回忆 😶🌫️每日金句:祝大家心有山水不造作&…...
DollarTree(美元树)验厂需要注意哪些方面?
【DollarTree(美元树)验厂需要注意哪些方面?】 美元树(Dollar tree),是美国的一元店。每件商品都只卖一美元,吃的、用的和玩的应有尽有。美元树在美国共拥有4900家门店,其中一半的连…...
vector使用和模拟实现
💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 C👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大…...
token登录的实现
token登录的实现 我这种token只是简单的实现token,就是后端利用UUID 生成简单随机码,利用随机码作为在Redis中的键,然后存储的用户信息作为值,在每次合理请求的时候对token的有效时间进行刷新(利用拦截器)&…...
GO语言从入门到实战-Go语言课程介绍
为什么选择 Go 语言来完成这么大一个项目呢?我们不妨回到 Go 语言的源头看一看。 Go 语言的初步设想始于 2007 年,当时 Go 语言的三位创始人是想通过开发一种新型的语言来解决 Google 在软件开发中面临的问题: 多核硬件架构;超大…...
七天学会C语言-第六天(指针)
1.指针变量与普通变量 指针变量与普通变量是C语言中的两种不同类型的变量,它们有一些重要的区别和联系。 普通变量是一种存储数据的容器,可以直接存储和访问数据的值。: int num 10; // 定义一个整数型普通变量num,赋值为10在例…...
2023年腾讯云轻量服务器测评:16核 32G 28M 配置CPU测试
腾讯云轻量应用服务器16核32G28M配置优惠价3468元15个月(支持免费续3个月/送同配置3个月),轻量应用服务器具有100%CPU性能,系统盘为380GB SSD盘,28M带宽下载速度3584KB/秒,月流量6000GB,折合每天…...
macos (M2芯片)搭建flutter环境
安装的版本3.13.4、电脑上没有安装过android studio、安装过brew 1.在终端运行sudo softwareupdate --install-rosetta --agree-to-license,下图展示安装成功的效果 2.下载以下安装包来获取最新的 stable Flutter SDK 3.解压,⚠️注意下载安装sdk的包名…...
Xilinx FPGA未使用管脚上下拉状态配置(ISE和Vivado环境)
文章目录 ISE开发环境Vivado开发环境方式1:XDC文件约束方式2:生成选项配置 ISE开发环境 ISE开发环境,可在如下Bit流文件生成选项中配置。 右键点击Generate Programming File,选择Process Properties, 在弹出的窗口选…...
数据结构---链表(java)
目录 1. 链表 2. 创建Node 3. 增加 4. 获取元素 5. 删除 6. 遍历链表 7. 查找元素是否存在 8. 链栈的实现 9. 链队的实现 1. 链表 数据存放在"Node"结点中 优点:不用考虑扩容和缩容的问题,实现了动态存储数据 缺点:没有…...
Qt --- Day02
实现效果: 点击登录,检验用户密码是否正确,正确则弹出消息框,点击ok转到另一个页面 不正确跳出错误消息框,默认选线为Cancel,点击Yes继续登录 点击Cancel跳出问题消息框,默认选项No,…...
春联生成模型-中文-base多线程批量生成教程,为公司百名员工定制春节祝福
春联生成模型-中文-base多线程批量生成教程,为公司百名员工定制春节祝福 春节将至,为公司员工准备个性化春联是传递祝福的好方式。传统手工创作耗时耗力,而春联生成模型-中文-base结合多线程技术,能高效完成批量定制。本文将详细…...
跨境电商多语种支持:SenseVoice-Small ONNX语音识别模型部署与本地化适配
跨境电商多语种支持:SenseVoice-Small ONNX语音识别模型部署与本地化适配 1. 环境准备与快速部署 SenseVoice-Small ONNX模型是一个经过量化处理的高效语音识别解决方案,特别适合跨境电商场景中的多语言语音处理需求。这个模型支持超过50种语言&#x…...
ccmusic-database新手教程:Gradio输出组件定制——增强Top5结果可读性技巧
ccmusic-database新手教程:Gradio输出组件定制——增强Top5结果可读性技巧 1. 项目简介与背景 ccmusic-database是一个基于深度学习的音乐流派分类系统,它能够自动识别音频文件所属的音乐流派。这个系统在计算机视觉预训练模型VGG19_BN的基础上进行微调…...
OpenClaw安全配置要点:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF本地运行权限管理
OpenClaw安全配置要点:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF本地运行权限管理 1. 为什么需要特别关注OpenClaw的安全配置? 第一次在本地部署OpenClaw时,我犯了一个新手常见的错误——直接使用默认配置启动服务。结果第二天…...
OpenClaw常用命令与在Windows下安装Tavily-Search
目录1. Windows安装Tavily-Search2. 启动与关闭2.1 正常流程2.2 故障处理3. 模型切换1. Windows安装Tavily-Search 确保目录位于C:\Users\用户名运行命令npx clawhub install openclaw-tavily-search在C:\Users\用户名\.openclaw创建文件.env用记事本打开.env,写入…...
agent实习面经(十一)
来自网络,侵删 先完成,再完美 某东,某节1.LLM 为什么有幻觉,如何减少 LLM 幻觉?1.1概率生成机制:LLM 本质是基于统计概率预测下一个 token,而非检索事实数据库。当训练数据中缺乏确切信息或模…...
OpenClaw定时任务:利用GLM-4.7-Flash实现智能日程管理
OpenClaw定时任务:利用GLM-4.7-Flash实现智能日程管理 1. 为什么需要智能化的定时任务 记得上个月我连续错过了三个重要会议,原因很简单——手动设置的日历提醒被其他通知淹没了。这种经历让我开始寻找更智能的解决方案。传统定时工具只能机械地执行预…...
TranslucentTB启动失败解决方案:3种方法修复Microsoft.UI.Xaml.2.8缺失问题
TranslucentTB启动失败解决方案:3种方法修复Microsoft.UI.Xaml.2.8缺失问题 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB T…...
石家庄整家定制口碑供应商
在石家庄,寻找一家值得信赖的整家定制服务商,是许多家庭在装修时的重要考量。一个优秀的定制品牌,不仅能为居者提供个性化的空间解决方案,更能将美学、功能与品质融为一体,让日常居住成为一种享受。关于我们位于石家庄…...
运维提效实战:用 Ansible+Cron 搞定日志自动清理,再也不用半夜爬起来删日志了
前言 作为常年和服务器打交道的运维人,估计没人没经历过半夜被磁盘爆满告警吵醒的崩溃 —— 远程登服务器、挨个找日志文件、手动删旧日志,一套操作下来人彻底清醒,回头还得担心误删关键文件。 其实这类重复又机械的运维活儿,完全…...
