JWT(JSON WEB TOKEN)是玩具吗
JWT当然不是玩具,理解其设计意图,和适用场景自然会发现存在的就是有价值的
JWT: JSON Web Token
起源和定义
JWT(JSON Web Token)是由 IETF(Internet Engineering Task Force)基于 RFC 7519 规范定义的。它是一种用于在网络应用间传递信息的标准方法。JWT 最初由无状态的分布式应用场景需求而定义,以提供一种简洁的方式来传递信息,同时保证安全性。
JWT的结构
JWT 由三部分组成,它们使用点号(.)分隔开来:
Header(头部):包含了令牌的元数据信息,例如算法和类型。
如{ "alg": "HS256", "typ": "JWT" }Payload(负载):包含了要传递的用户数据,例如用户ID、角色等。
如{ "sub": "1234567890", "username": "exampleUser", "role": "admin" }Signature(签名):对头部和负载进行签名,以确保消息的完整性。
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)其中,认证秘钥(secret)用于对签名进行验证和生成,确保令牌的真实性和完整性。密钥本身的安全非常重要,如果密钥泄漏那么签名本身等于裸奔
验证机制
JWT 的验证主要依赖于签名和有效期:
签名验证:接收方通过验证 JWT 中的签名来确保消息的完整性,防止篡改。
这一过程包括:
分离出Header和Payload并分别进行Base64Url解码。
使用Header中定义的算法和服务器的私有密钥对(Header + Payload)进行签名运算。
比较计算得出的签名与接收到的Token中的Signature部分是否一致。有效期验证:接收方验证 JWT 的过期时间(exp),确保 JWT 在有效期内使用。
对Payload部分进行检查,包括但不限于:
过期时间(Expiration Time, exp):确认Token未过期。
生效时间(Not Before, nbf):确认Token已生效。
发行者(Issuer, iss) 和 受众(Audience, aud):确认Token是由预期的发行者为预期的受众发布的。
处理流程
- 客户端请求:客户端在后续请求中携带JWT,通常放在Authorization HTTP头的Bearer模式下。
- 服务器响应:服务器提取JWT,按照上述步骤验证其签名和载荷的有效性。
- 授权决策:如果JWT验证通过,则服务器信任客户端提供的用户身份和权限信息,允许访问受保护的资源。
使用JWT认证流程图

安全考虑
- 服务器端保存的蜜钥不可泄漏,最好定期刷新
- 为了保持安全性,应设置合理的Token有效期,并提供Token刷新机制
- 考虑提供Token撤销机制:创建一个可分布式存储的黑名单(例如,Redis缓存、数据库表或其他高效存储解决方案),用于存储撤销的token的相关信息。这可能是整个JWT令牌,或者是JWT中的唯一标识符(如JTI,JWT ID),当想要撤销某个已经下发的 token就将它加入到名单。需要注意的是,验证的时候肯定是先去验证有效期,如果已经过期,不需要关注是否在黑名单。而且黑名单本身也会自动过期并删除即可,毕竟一支存放它浪费空间毫无意义
优点和缺点
优点:
- 无状态性:JWT 不需要服务器存储会话信息,减轻了服务器负担。传统方式下,我们需要将会话信息持久化到DB、缓存等服务中,每次都避免不了要获取才能验证。
- 跨域支持:JWT 可在不同域之间轻松传递信息。
- 安全性:JWT 使用签名验证消息完整性,防止数据篡改。
缺点:
- Token 大小:JWT 包含了额外信息,增加了网络传输负担。
- 无法撤销:JWT 一旦发放,无法撤销,除非设置短期过期时间。
- 不是那么安全:不能传递敏感信息,本身虽然签名但是荷载部分知识base64,当然可以选择使用一种对成签名算法来对荷载部分加密
相关资料
JWT(JSON WEB TOKEN)是玩具吗的更多相关文章
- Java JWT: JSON Web Token
Java JWT: JSON Web Token for Java and Android JJWT aims to be the easiest to use and understand libr ...
- 如何在SpringBoot中集成JWT(JSON Web Token)鉴权
这篇博客主要是简单介绍了一下什么是JWT,以及如何在Spring Boot项目中使用JWT(JSON Web Token). 1.关于JWT 1.1 什么是JWT 老生常谈的开头,我们要用这样一种工具 ...
- JWT(JSON Web Token) 【转载】
JWT(JSON Web Token) 什么叫JWTJSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. 一般来说,互联网用户认证是这样子的. 1.用户向服务器发送用户名和密码. ...
- [更新]一份包含: 采用RSA JWT(Json Web Token, RSA加密)的OAUTH2.0,HTTP BASIC,本地数据库验证,Windows域验证,单点登录的Spring Security配置文件
没有任何注释,表怪我(¬_¬) 更新: 2016.05.29: 将AuthorizationServer和ResourceServer分开配置 2016.05.29: Token获取采用Http Ba ...
- ( 转 ) 什么是 JWT -- JSON WEB TOKEN
什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点 ...
- 关于JWT(Json Web Token)的思考及使用心得
什么是JWT? JWT(Json Web Token)是一个开放的数据交换验证标准rfc7519(php 后端实现JWT认证方法一般用来做轻量级的API鉴权.由于许多API接口设计是遵循无状态的(比如 ...
- 什么是JWT(Json Web Token)
什么是 JWT (Json Web Token) 用户认证是计算机安全领域一个永恒的热点话题. JWT 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519). 该to ...
- API安全验证之JWT(JSON WEB TOKEN) OLCMS
假如www.olcms.com/getUserInfo获取用户信息,你怎么知道当前用户是谁?有人说登陆时候我把他UID写入session了,如果是API接口,没有session怎么办,那么就需要把UI ...
- 5分钟搞懂:JWT(Json Web Token)
https://www.qikegu.com/easy-understanding/892 JWT 基于token的用户认证原理:让用户输入账号和密码,认证通过后获得一个token(令牌),在toke ...
- JWT(Json Web Token)认证
目录 JWT(Json Web Token) JWT的数据结构 JWT的用法 JWT验证流程
随机推荐
- SpringBoot Maven查看依赖树
dependency:tree -f pom.xml
- 一款开源免费功能强大的一站式自动化运维及自动化部署平台orion-ops
一站式自动化运维及自动化部署平台, 使用多环境的概念, 提供了机器管理.机器监控报警.Web终端.WebSftp.机器批量执行.机器批量上传.在线查看日志.定时调度任务.应用环境维护.应用构建及发布任 ...
- 基于微信小程序的校园维修管理系统-开题报告参考
\n文末获取源码联系 感兴趣的可以先收藏起来,大家在毕设选题,项目以及论文编写等相关问题都可以给我加好友咨询 一.课题研究的目的和意义** 本研究开发基于微信小程序的物品维修系统,它不仅能实现专业的维 ...
- CF709B 题解
洛谷链接&CF 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 给定 \(N\) 个点,在一条数轴上,位置为 \(x_1,-,x_n\),你的位置为 \(p\) ...
- JMeter+Ant+Jenkins接口自动化测试框架(Windows)
一:简介 大致思路:Jmeter可以做接口测试,也能做压力测试,而且是开源软件:Ant是基于Java的构建工具,完成脚本执行并收集结果生成报告,可以跨平台,Jenkins是持续集成工具.将这三者结合起 ...
- 假期小结3Hadoop学习
学习Hadoop是一个很好的选择,因为它是大数据处理和分析领域最流行的框架之一.Hadoop提供了可靠.可扩展的分布式数据处理能力,适用于处理大规模数据和构建可靠的数据管道. 在学习Hadoop时,以 ...
- SEO初学指南之关键词研究(1) - 入门
Hi,我是听风. 第一篇给大家科普了什么是SEO以及搜索引擎的原理,这篇文章我们正式进入关键词研究的章节. 本片文章将学习什么是关键词以及如何挑选符合预期的关键词. 一.什么是SEO关键词 简单来说就 ...
- 使用ventoy安装windows10
使用ventoy安装windows10 在ventoy中选择windows10镜像 进入Windows安装界面 下一步,选择现在安装 稍等片刻 选择我没有产品密钥 根据需求选择对应版本 下一步,接受许 ...
- AI的发展需要有应用和落地场景 —— 李开复:传统公司看不懂技术,大模型落地B端阻碍多
引自:https://baijiahao.baidu.com/s?id=1801826206644007472&wfr=spider&for=pc "我们投了七八家机器人企业 ...
- 如何在anaconda环境中安装cuda.h和cuda_runtime.h
在前面的文章(几年前的文章)中我们介绍了在anaconda中安装cuda.cudnn后,有介绍了如何在anaconda中安装nvcc.nccl等NVIDIA的各种编译器和库,本文介绍如何在anacon ...