手机 网站 开发,丹阳网站建设报价,织梦cms官网模板,百度站长电脑版✅作者简介#xff1a;大家好#xff0c;我是Leo#xff0c;热爱Java后端开发者#xff0c;一个想要与大家共同进步的男人#x1f609;#x1f609; #x1f34e;个人主页#xff1a;Leo的博客 #x1f49e;当前专栏#xff1a;每天一个知识点 ✨特色专栏#xff1a…
✅作者简介大家好我是Leo热爱Java后端开发者一个想要与大家共同进步的男人 个人主页Leo的博客 当前专栏每天一个知识点 ✨特色专栏 MySQL学习 本文内容JWT和Token之间的区别 ️个人小站 个人博客欢迎大家访问 个人知识库 知识库欢迎大家访问 目录 1.Token1.1 特点和使用1.2 Token基本原理1.3 优点1.4 缺点 2.JWT2.1 JWT优势1.无状态2.有效的避免的CSRF攻击 2.2 JWT基本原理2.4 差异性 在这篇文章中我们主要介绍了JWT的相关概念。
什么是JWTJWT由哪些部分组成JSON Web Tokens是如何工作的如何基于 JWT 进行身份验证如何防止 JWT 被篡改的
今天我们主要介绍一下JWT跟Token之间的区别和联系。
1.Token
Token是一个宽泛的术语它可以指代任何一种用于身份验证的机制。Token 常常被用在验证和授权流程中。Token 可以有不同的形式和结构如随机生成的字符串或者特定格式的编码数据。
1.1 特点和使用
不固定格式Token 可以是任何格式的数据字符串不仅限于JWT。存储信息Token 可能仅作为引用存储在服务器上服务器通过该引用来获取存储的状态信息。会话管理经统一的身份验证后Token用来管理用户会话。传输方式灵活可以通过HTTP headers、URL参数或请求体传输。
1.2 Token基本原理
Token (就是加密的字符串,使用MD5,等不可逆加密算法,一定要保证唯一性)
客户端使用用户名跟密码请求登录
服务端收到请求去验证用户名与密码
验证成功服务端会签发一个Token保存到(Session,redis,mysql…)中然后再把这个 Token 发送给客户端
客户端收到 Token 以后可以把它存储起来比如放在 Cookie 里或者 Local Storage 里
客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
服务端收到请求验证密客户端请求里面带着的 Token和服务器中保存的Token进行对比效验, 如果验证成功就向客户端返回请求
1.3 优点
可以隐藏真实数据安全系数高适用于分布式/微服务Token支持手动控制过期、吊销等可以实时查询现有Token
1.4 缺点
存放在数据库或者redis依赖服务器资源效率相对JWT比较低
2.JWT
2.1 JWT优势
1.无状态
JWT 自身包含了身份验证所需要的所有信息因此我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性大大减轻了服务端的压力。
不过也正是由于 JWT 的无状态也导致了它最大的缺点不可控
就比如说我们想要在 JWT 有效期内废弃一个 JWT 或者更改它的权限的话并不会立即生效通常需要等到有效期过后才可以。再比如说当用户 Logout 的话JWT 也还有效。除非我们在后端增加额外的处理逻辑比如将失效的 JWT 存储起来后端先验证 JWT 是否有效再进行处理。
2.有效的避免的CSRF攻击
CSRFCross 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 差异性
标准与自定义JWT 是一个开放标准RFC 7519明确定义了 Token 的结构和生成方式而 Token 通常是自定义的没有统一的结构标准。状态存储JWT 是无状态的被设计为自包含携带所有用户信息因此服务端无需保存状态。而传统 Token 可能需要服务端存储额外的会话信息。安全性JWT 通过签名提供了额外的安全性。传统 Token 若无额外的安全措施则可能容易受到中间人攻击等安全威胁。体积JWT 通常比简单 Token 体积更大因为它包含了更多的用户信息和必需的加密数据。