当前位置: 首页 > news >正文

JWT和Token之间的区别

在这里插入图片描述

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏:每天一个知识点
✨特色专栏: MySQL学习
🥭本文内容:JWT和Token之间的区别
🖥️个人小站 :个人博客,欢迎大家访问
📚个人知识库: 知识库,欢迎大家访问

目录

    • 1.Token
      • 1.1 特点和使用
      • 1.2 Token基本原理
      • 1.3 优点
      • 1.4 缺点
    • 2.JWT
      • 2.1 JWT优势
        • 1.无状态
        • 2.有效的避免的CSRF攻击
      • 2.2 JWT基本原理
      • 2.4 差异性

在这篇文章中,我们主要介绍了JWT的相关概念。

  1. 什么是JWT
  2. JWT由哪些部分组成
  3. JSON Web Tokens是如何工作的
  4. 如何基于 JWT 进行身份验证
  5. 如何防止 JWT 被篡改的

今天我们主要介绍一下JWT跟Token之间的区别和联系。

1.Token

Token是一个宽泛的术语,它可以指代任何一种用于身份验证的机制。Token 常常被用在验证和授权流程中。Token 可以有不同的形式和结构,如随机生成的字符串或者特定格式的编码数据。

1.1 特点和使用

  1. 不固定格式:Token 可以是任何格式的数据字符串,不仅限于JWT。
  2. 存储信息:Token 可能仅作为引用存储在服务器上,服务器通过该引用来获取存储的状态信息。
  3. 会话管理:经统一的身份验证后,Token用来管理用户会话。
  4. 传输方式灵活:可以通过HTTP headers、URL参数或请求体传输。

1.2 Token基本原理

Token (就是加密的字符串,使用MD5,等不可逆加密算法,一定要保证唯一性)

客户端使用用户名跟密码请求登录

服务端收到请求,去验证用户名与密码

验证成功,服务端会签发一个Token保存到(Session,redis,mysql…)中,然后再把这个 Token 发送给客户端

客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里

客户端每次向服务端请求资源的时候需要带着服务端签发的 Token

服务端收到请求,验证密客户端请求里面带着的 Token和服务器中保存的Token进行对比效验, 如果验证成功,就向客户端返回请求

1.3 优点

  1. 可以隐藏真实数据,安全系数高
  2. 适用于分布式/微服务
  3. Token支持手动控制,过期、吊销等
  4. 可以实时查询现有Token

1.4 缺点

  1. 存放在数据库或者redis,依赖服务器资源
  2. 效率相对JWT比较低

2.JWT

2.1 JWT优势

1.无状态

JWT 自身包含了身份验证所需要的所有信息,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。

不过,也正是由于 JWT 的无状态,也导致了它最大的缺点:不可控!

就比如说,我们想要在 JWT 有效期内废弃一个 JWT 或者更改它的权限的话,并不会立即生效,通常需要等到有效期过后才可以。再比如说,当用户 Logout 的话,JWT 也还有效。除非,我们在后端增加额外的处理逻辑比如将失效的 JWT 存储起来,后端先验证 JWT 是否有效再进行处理。

2.有效的避免的CSRF攻击

CSRF(Cross Site Request Forgery) 一般被翻译为 跨站请求伪造,属于网络攻击领域范围。相比于 SQL 脚本注入、XSS 等安全攻击方式,CSRF 的知名度并没有它们高。但是,它的确是我们开发系统时必须要考虑的安全隐患。就连业内技术标杆 Google 的产品 Gmail 也曾在 2007 年的时候爆出过 CSRF 漏洞,这给 Gmail 的用户造成了很大的损失。

关于CSRF具体可以参考我这篇文章

2.2 JWT基本原理

JWT是JSON Web Token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证JWTToken的正确性,只要正确即通过验证。

JWT包含三个部分: Header头部,Payload负载和Signature签名。由三部分生成JwtToken,三部分之间用“.”号做分割。 校验也是JWT内部自己实现的 ,并且可以将你存储时候的信息从JwtToken中取出来无须查库

客户端使用用户名跟密码请求登录

服务端收到请求,去验证用户名与密码

验证成功,服务端会签发一个JwtToken,无须存储到服务器,直接再把这个JwtToken发送给客户端

客户端收到JwtToken以后可以把它存储起来,比如放在 Cookie里或者LocalStorage 里

客户端每次向服务端请求资源的时候需要带着服务端签发的JwtToken

服务端收到请求,验证密客户端请求里面带着的 JwtToken, 如果验证成功,就向客户端返回请求的数据

2.4 差异性

  1. 标准与自定义:JWT 是一个开放标准(RFC 7519),明确定义了 Token 的结构和生成方式,而 Token 通常是自定义的,没有统一的结构标准。
  2. 状态存储:JWT 是无状态的,被设计为自包含,携带所有用户信息,因此服务端无需保存状态。而传统 Token 可能需要服务端存储额外的会话信息。
  3. 安全性:JWT 通过签名提供了额外的安全性。传统 Token 若无额外的安全措施,则可能容易受到中间人攻击等安全威胁。
  4. 体积:JWT 通常比简单 Token 体积更大,因为它包含了更多的用户信息和必需的加密数据。
http://www.lryc.cn/news/242306.html

相关文章:

  • UserRole
  • java学习part10 this
  • Spring Cloud + Nacos 项目启动失败【No spring.config.import property has been defined】
  • CANopen协议【SDO】
  • 9-什么是迭代器,生成器,装饰器、django的信号用过吗?如何用,干过什么、什么是深拷贝,什么是浅拷贝,如何使用、slice操作符和list构造函数
  • RabbitMQ之发送者(生产者)可靠性
  • 乐得瑞LDR6020 VR串流线方案:实现同时充电传输视频信号
  • 【libGDX】Mesh纹理贴图
  • 基线扫描tomcat安全加固-检查是否支持HTTPS等加密协议
  • 基于 STM32F7 和神经网络的实时人脸特征提取与匹配算法实现
  • Android笔记(十四):JetPack Compose中附带效应(一)
  • 【web】Fastapi自动生成接口文档(Swagger、ReDoc )
  • 竞赛选题 题目:基于FP-Growth的新闻挖掘算法系统的设计与实现
  • 188. 股票买卖问题(交易次数为任意正整数)
  • Typescript怎样对URL参数进行编码?
  • AndroidStudio2022.3.1 Patch3使用国内下载源加速
  • Go语言的学习笔记2——Go语言源文件的结构布局
  • python给视频增加字幕
  • 相机设置参数:黑电平(Black Level)详解和示例
  • Mac Ubuntu双系统解决WiFi和WiFi 5G网络不可用问题
  • 数据分析基础之《matplotlib(2)—折线图》
  • Rust语言入门教程(三) - 函数与模块系统
  • ubuntu22.04 arrch64版在线安装java环境
  • 概率论与数理统计中常见的随机变量分布律、数学期望、方差及其介绍
  • 骨传导耳机的优缺点都有哪些?骨传导耳机值得入手吗?
  • 在ASP.NET Core 中使用 .NET Aspire 消息传递组件
  • NLP学习
  • Linux-Ubuntu环境下搭建SVN服务器
  • python tkinter使用(四)
  • 记录ruoyi-plus-vue部署的问题