探寻JWT的本质:它是什么?它有什么作用?

news2024/11/26 23:19:44

46a6c5cad4caa42c5d6bb6f34d5ac0c3.jpeg

JWT(JSON Web Token)是一种基于 JSON 格式的轻量级令牌(token)协议,它被广泛应用于网络应用程序的身份验证和授权。相较于传统的 session-based 认证机制,JWT 具有更好的扩展性和互操作性,同时也更安全可靠。

JWT 的结构由三部分组成:头部(header)、载荷(payload)和签名(signature)。头部和载荷使用 Base64 编码后,通过点号(.)连接成为一个字符串,这个字符串就是 JWT 的第一部分。签名由头部、载荷和一个密钥(secret)使用特定的算法计算得出,用于验证 JWT 的合法性。

头部部分包含了 JWT 的元数据信息,例如使用的加密算法、类型等等。载荷部分则是 JWT 所要传递的信息,可以是任何 JSON 格式的数据。常见的 payload 包含用户 ID、角色、过期时间等等。签名部分则是为了防止 JWT 被篡改,使用了一个密钥对头部和载荷进行签名生成的字符串。

JWT 的优点在于它可以跨越多个域名和多个平台,使得身份验证和授权变得更加简单和安全。在使用 JWT 进行身份验证时,服务端在用户登录成功后,将用户 ID、用户名等信息加密成为 JWT 并发送给客户端,客户端在接下来的每个请求中都将 JWT 作为认证信息发送给服务端。服务端在接收到请求后,通过验证 JWT 的签名和有效期,判断该请求是否合法。

3a6cd2aea68be145e9122e31fc960435.jpeg

JWT数据组成图

除了上文提到的优点,JWT 还具有以下特点:

  • 无状态

JWT 不需要在服务端存储任何状态,客户端可以携带 JWT 来访问服务端,从而使服务端变得无状态。这样,服务端就可以更轻松地实现扩展和负载均衡。

  • 可自定义

JWT 的载荷部分可以自定义,可以存储任何 JSON 格式的数据。这意味着我们可以使用 JWT 来实现一些自定义的功能,例如存储用户喜好、配置信息等等。

  • 可扩展性强

JWT 有一套标准规范,因此很容易在不同平台和语言之间共享和解析。此外,开发人员还可以通过自定义扩展声明(claims)来实现更加灵活的功能。

  • 可调试性好

由于 JWT 的内容是以 Base64 编码后的字符串形式存在的,因此非常容易进行调试和分析。

然而,JWT 也存在一些缺点和注意事项:

  • 安全性取决于密钥管理

JWT 的安全性取决于密钥的管理。如果密钥被泄露或者被不当管理,那么 JWT 将会受到攻击。因此,在使用 JWT 时,一定要注意密钥的管理,包括生成、存储、更新、分发等等。

  • 无法撤销令牌

由于 JWT 是无状态的,一旦 JWT 被签发,就无法撤销。如果用户在使用 JWT 认证期间被注销或禁用,那么服务端就无法阻止该用户继续使用之前签发的 JWT。因此,开发人员需要设计额外的机制来撤销 JWT,例如使用黑名单或者设置短期有效期等等。

  • 需要传输到客户端

由于 JWT 包含了用户信息和授权信息,因此 JWT 需要传输到客户端。这意味着 JWT 有被攻击者窃取的风险,因此开发人员需要采取措施来保护 JWT,例如使用 HTTPS、设置短期有效期等等。

  • 载荷大小有限制

由于 JWT 需要传输到客户端,因此载荷大小也有限制。一般来说,载荷大小不应该超过 1KB,否则会影响性能。

在实际开发中,JWT 的使用场景非常广泛。下面是一些常见的场景:

  1. Web 应用程序
  2. Web 应用程序是 JWT 最常见的使用场景之一。开发人员可以将 JWT 作为用户认证和授权的机制,从而实现无状态的身份验证和授权。
  3. 移动应用程序
  4. 移动应用程序通常需要访问多个 API,因此 JWT 可以作为移动应用程序的身份验证和授权机制。开发人员可以使用 JWT 来实现单点登录和授权,从而提高应用程序的性能和安全性。
  5. IoT 设备
  6. IoT 设备通常需要进行身份验证和授权,以保护设备和数据的安全。JWT 可以作为 IoT 设备的身份验证和授权机制,从而实现设备间的安全通信。
  7. 微服务架构
  8. 微服务架构通常由多个服务组成,因此需要实现服务间的安全通信和授权。JWT 可以作为微服务架构的身份验证和授权机制,从而实现服务间的安全通信和授权。
3040a7360848c88d01b705e032d72837.jpeg

JWT用户认证流程图

最后,总结一下 JWT 的优点和缺点:

优点:

  1. 无状态:JWT 本身不需要存储在服务器上,因此可以实现无状态的身份验证和授权。
  2. 可扩展性:JWT 的载荷可以自定义,因此可以根据需求添加任意信息。
  3. 可靠性:JWT 使用数字签名来保证安全性,因此具有可靠性。
  4. 跨平台性:JWT 支持多种编程语言和操作系统,因此具有跨平台性。
  5. 高效性:由于 JWT 不需要查询数据库,因此具有高效性。

缺点:

  1. 安全性取决于密钥管理:JWT 的安全性取决于密钥的管理,如果密钥被泄露或者被不当管理,那么 JWT 将会受到攻击。
  2. 无法撤销令牌:由于 JWT 是无状态的,一旦 JWT 被签发,就无法撤销。
  3. 需要传输到客户端:由于 JWT 包含了用户信息和授权信息,因此 JWT 需要传输到客户端,这意味着 JWT 有被攻击者窃取的风险。
  4. 载荷大小有限制:由于 JWT 需要传输到客户端,因此载荷大小也有限制。

总之,JWT 是一种简单、安全、可靠、高效的身份验证和授权机制。开发人员可以根据具体需求,选择是否使用 JWT,以及如何使用 JWT。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1097087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

KdMapper扩展实现之AVG(aswArPot.sys)

1.背景 KdMapper是一个利用intel的驱动漏洞可以无痕的加载未经签名的驱动,本文是利用其它漏洞(参考《【转载】利用签名驱动漏洞加载未签名驱动》)做相应的修改以实现类似功能。需要大家对KdMapper的代码有一定了解。 2.驱动信息 驱动名称aswA…

再玩玩B端搭建

一、背景 在 B 端领域深耕多年,接触了成百上千的 B 端页面,发现对于 B 端产品需求和 C 端有着明显的差异,B端产品一般是基于现有的“业务”形态,将传统线下工作,通过程序化、系统化、信息化转换为线上产品&#xff0c…

网络安全工程师的入门学习的路径

网络安全工程师的入门学习的路径 最近看到网上有很多人在问诸如:“怎样成为网络信息安全工程师”等相关问题,这可能与近几年网络安全事件频发,国家对于互联网信息安全和互联网舆情的重视程度不断提升有关,网络信息安全工程师随之…

【Linux学习笔记】调试工具gdb

1. gdb2. debug和release的认识3. gdb命令 1. gdb gdb是Linux下的一个调试工具,主要内容是利用命令行来调试代码,下面我将以vs2019的调试操作逐一对应到gdb的调试命令。 首先我是在xshell连接远端云服务器搭配Linux环境来使用gdb的,第一步要…

vue 和 后端交互

1.前端的路径请求是(请求参数:key和value): this.$http.delete("http://localhost:8080/user/delete?id"id).then(res>{ 后端是接收前端参数 DeleteMapping("/delete")public String delete(Integer id)…

4.1 网络层提供的两种服务

思维导图: ## 第4章 网络层 ### 概述 网络层主要关注网络互连问题,其中重点是网际协议(IP)。掌握了IP协议的内容,我们就能理解互联网的工作机制。本章还涉及了ICMP、路由选择协议、IPv6特点、IP多播概念,以及VPN、NAT和MPLS。 #…

正点原子嵌入式linux驱动开发——字符设备驱动开发

经过之前这么多篇笔记的学习,Ubuntu操作系统以及完整的Linux系统移植,已经初步掌握了开发板系统搭建的过程,在STM32MP157上搭建了自己的简单开发系统,从这一篇笔记开始就可以证实Linux驱动开发的学习了!之后的正点原子…

VBA之正则表达式(43)-- 从网页中提取指定数据

实例需求:由网页中提取下图中颜色标记部分内容,网页中其他部分与此三行格式相同。 方法1 Sub Demo()Dim objRegex As ObjectDim inputString As StringDim objMatches As ObjectDim objMatch As ObjectSet objRegex CreateObject("VBScript.RegEx…

Drecom 的《Eternal Crypt - Wizardry BC -》加入 The Sandbox 啦!

经典 “Wizardry” 游戏系列的新区块链迭代将通过全球合作拓展 Web3 游戏宇宙。 我们非常高兴地宣布,沙盒游戏公司与富有远见的传奇游戏《Wizardry》系列创造者 Drecom 将建立充满活力的合作伙伴关系。我们将共同推出《Eternal Crypt - Wizardry BC -》&#xff0c…

260. 只出现一次的数字 III (中等,位运算)

还是不会做,思路来自官解 对于整个数组按异或求和,可以得到只出现一次的两个数的异或值,通过这个值我们可以知道这两个数哪一位是相同的,哪一位是不同的假设这两个数字最低的不同发生在第 l 位(因为两个数字不同&…

网络安全 - 一名合格的Web安全工程师之成长路径

最近经常听到公司的招聘专员反馈应聘者简历“水分”太大,尤其是技术岗位,例如Web安全工程师,明明是初级阶段的菜鸟,就敢写资深Web安全工程师;在几个项目做一些基础打杂的工作,就敢写带过团队,项…

强制禁止,线程池不允许使用Executors创建

目录 一、线程池二、线程池不允许使用Executors创建三、这是为什么呢?四、下面通过一段代码,测试一下。五、线程池参数 大家好,我是哪吒。 一、线程池 在程序开发中,高并发场景越来越多,线程池首当其冲。 简单回顾一…

LVGL_基础控件线条line

LVGL_基础控件线条line 1、创建基础空间line(只创建出来是没有东西显示的) /* 创建一个 line 组件(对象),他的父对象是活动屏幕对象 */ lv_obj_t * line lv_line_create(lv_scr_act());2、添加点,把这些点连成线 /* 设置一组…

文件路径操作

避开-转义字符 python文件路径导致的错误常常与“\”有关,因为在路径中的“\”常会被误认为转义字符。 所以在上述路径中,\table\name\rain中的\t,\n,\r都易被识别为转义字符。 解决的办法主要由以下三种: #1 前面加r表示不转义 pathr&quo…

南美厄瓜多尔市场最全分析开发攻略,收藏一篇就够了

2023年5月11日,中厄自由贸易协定签署,不仅标志着中国加强与拉美地区的经济合作,也为外贸人拓展市场提供了巨大的机会。厄瓜多尔是一个具有潜力的市场,其年轻的消费群体和较高的互联网普及率为外贸人提供了广阔的发展空间。今天来分…

网络安全工程师需要学什么?零基础怎么从入门到精通,看这一篇就够了

网络安全工程师需要学什么?零基础怎么从入门到精通,看这一篇就够了 我发现关于网络安全的学习路线网上有非常多看似高大上却无任何参考意义的回答。大多数的路线都是给了一个大概的框架,告诉你那些东西要考,以及建议了一个学习顺…

超高度近视+白内障,爱尔眼科周进院长助患者视界“焕新”

57岁的徐女士自幼就是高度近视并开始戴眼镜,且近视度数逐年增加,很快便发展成了2000多度的超高度近视,最终在爱尔眼科四川眼科周进院长的帮助下,一次手术同时解决了高度近视和白内障的问题,视力得以改善,50…

Notepad ++ 零基础入门到精通安装与配置教程(非常详细)

Notepad 获取与安装 —————————— Notepad 是什么 在运行中输入 notepad 会弹出来记事本: 所以 Notepad 就是增强的记事本!这个跟 C 与 C 的名字是一样滴! Notepad 是 Windows 操作系统下的一套文本编辑器 软件版权许可证 GPL有…

css 左右滚轮无缝衔接

最近的项目有做到一个功能 类似跑马灯或者公告栏那种 有文字 也有列表的 所以 写了两种 第一种公告栏文字是用的js 第二种图文类型是用的css 两种方法 记录一下 第一种 纯文字滚动 其实也是根据js去计算dom的宽度 通过js去给css赋值 <div class"div1"><div …

Python抽奖系统-----控制台显示

以下是一个 Python 抽奖系统&#xff0c;其中包含更多的功能&#xff0c;如添加参与者、多轮抽奖、保存获奖者名单等&#xff1a; import random import osdef load_participants():try:with open("participants.txt", "r") as file:participants file.r…