Skip to content

JWT和Token之间的区别 ​

字数: 0 字 时长: 0 分钟

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

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

今天我们主要介绍一下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 体积更大,因为它包含了更多的用户信息和必需的加密数据。
本站访客数 人次 本站总访问量 次