Shiro(八):JWT介绍

news2025/5/10 16:34:41

1、什么是JWT?

      JWT(JSON Web Token,JSON Web令牌)是一种开放标准(RFC 7519),用于在网络应

     用环境间安全地传递声明(claims)作为JSON对象;JWT会按指定的加密算法将该JSON对

     象加密成一个字符串。

     例如,服务器可以生成具有声明 “以管理员身份登录”(一般在 claims 中声明) 的令牌,并将

     其提供给客户端,客户端可以使用该令牌来证明客户是以管理员身份登录的。令牌由服务器的

     密钥签名,因此服务器能够验证令牌是否合法。

      通俗的来讲,JWT就是一个用于加密或解密且不允许修改的字符串的字符串。

2、JWT的结构

     JWT是一种紧凑的、URL安全的表示方式,用于在两方之间传输信息。它由三部分组成:

            JWT格式:Header.Payload.Signature

     1)Header(标头)

          Header 主要包含JWT令牌类型和用于生成签名的加密算法,Header示例如下所示:

{
   "alg":"HS256",
   "type":"JWT"
}

                HS256 表示当前令牌使用 HMAC-HSA256 算法进行签名

     2)Payload(有效负载)

          Payload 主要包含声明(claims),即要传输的数据;是关于实体(通常是用户)和

          其他数据的描述。有三种类型的声明:

                  I)注册声明:预定义声明,如iss, exp, sub, aud等

                  II)公开声明

                  III)私有声明

                  示例如下所示:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "iat": 1516239022
}

     3)Signature(签名)

          Signature 是将通过将编码后的header、编码后的payload、一个密钥和header中指定的

          算法生成签名;用于验证消息在传输过程中没有被篡改。

          签名的计算方式是:先使用base64url 标头Header有效负载Payload 进行编码,

                                           并将编码结果以英文句号(.)拼接起来,最后通过标头Header中的

                                           加密算法对密钥key和拼接结果进行加密生成签名Signature,

                                           如下所示:

//密钥
key = "secretKey"
//通过base64url对标头Header 和 有效负载Payload 进行编码,并以“.” 进行连接
unsignedToken = EncodeBase64(Header) + "." + EncodeBase64(Payload)
//生成签名key
signature = HMAC-HSA256(key,unsignedToken)

     

      最后将Header 、Payload  和Signature 以英文句号(.)拼接在一起就是JWT。

      为了将他们拼接在一起,我们将签名Signature也以base64url 进行编码,如下所示:

//生成JWT

token = EncodeBase64(Header) + "." + EncodeBase64(Payload) + "." + EncodeBase64(signature)

   

3、JWT工作流程  

      JWT工作流程如下图所示:

              

3.1、客户端登录与JWT令牌获取

         用户通过“用户名/密码” 的方法向认证服务器发送登录认证请求;服务器验证用户身份,若

        验证通过,则生成JWT,并将生成的JWT返回给客户端

3.2、客户端携带JWT令牌访问资源

         客户端将 JWT 存储在本地(如 localStoragesessionStorage 或内存)

         客户端在后续请求通过 HTTP 头部(如 Authorization: Bearer <JWT>)携带 JWT令牌

3.3、服务器验证JWT并处理后续请求

         服务端从请求头中提取JWT令牌,并使用预共享的密钥或公钥验证签名是否有效,确保

        JWT令牌未被篡改;JWT令牌校验通过则处理请求并返回处理结果,否则直接返回错误信息

3.4、令牌刷新

         在实际工作中,一般给JWT设置较短的过期时间,当客户端jwt令牌过期后,执行 

         Refresh Token 向服务端请求新的JWT,即:短期JWT令牌 + 长期刷新JWT

4、JWT优点

      相对于传统的Session,JWT有如下优点:

      1)无状态,服务端不需要存储Session会话信息,降低服务端压力

      2)支持跨域,适用于分布式系统和单点登录

      3)灵活性好,JWT中可以包含用户自定义的数据(有效负载)

      4)安全性好,JWT使用签名加密的方式,不允许被修改。

5、JWT使用场景

     1)身份验证和授权

     2)信息交换,可以包含自定义数据

     3)分布式系统和单点登录

6、JWT使用时需要注意的点

     1)不要将敏感信息放入JWT

     2)最好使用HTTPS请求来传输JWT,更安全

     3)JWT使用时需要设置合理的过期时间

     4)使用强密钥

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

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

相关文章

【HDLBits刷题】Verilog Language——1.Basics

目录 一、题目与题解 1.Simple wire&#xff08;简单导线&#xff09; 2.Four wires&#xff08;4线&#xff09; 3.Inverter&#xff08;逆变器&#xff08;非门&#xff09;&#xff09; 4.AND gate &#xff08;与门&#xff09; 5. NOR gate &#xff08;或非门&am…

Python 常用内置函数详解(十):help()函数——查看对象的帮助信息

目录 一、语法参考二、示例 一、语法参考 help() 函数的语法格式如下&#xff1a; 参数说明&#xff1a; request&#xff1a;可选参数&#xff0c;要查看其帮助信息的对象&#xff0c;如类、函数、模块、数据类型等&#xff1b;返回值&#xff1a;返回对象的帮助信息。 二…

【Python系列】Python 中的 HTTP 请求处理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

辉芒微离线烧录器“文件格式错误”问题解决

最近在使用辉芒微离线烧录器烧录程序时&#xff0c;提示“文件格式错误”&#xff0c;记录一下解决方法。 一、问题现象 经过多次尝试和排查&#xff0c;发现以下几种情况&#xff1a; 情况一&#xff1a;使用离线烧录器导入固件1&#xff08;boot程序&#xff09;&#xff0c…

【软件设计师:体系结构】15.计算机体系结构概论

计算机体系结构是指计算机系统的功能和属性,是程序员所看到的计算机的属性。它主要研究计算机体系的概念性结构和功能特性,包括指令集、数据类型、存储器寻址技术、I/O机制等。例如,计算机是否具备乘法指令的功能,这是一个体系结构的问题。 一、机内代码及运算 一、数的进…

vscode 配置doxygen注释和snippet

vscode 配置doxygen注释和snippet Doxygen的C/C注释原则 基于Doxygen的C/C注释原则 标注总述 1.文件头标注 2. 命名空间标注 3. 类、结构、枚举标注 4. 函数注释原则 5. 变量注释 6. 模块标注 7. 分组标注指令表格 命令字段名语法file文件名file [< name >]brief简介b…

HarmonyOS NEXT 免费无广告看电影app:从想法到实现的经验总结

学习一项新技能&#xff0c;最好也是最快的方法就是动手实战。学习鸿蒙也一样&#xff0c;给自己定一个小目标&#xff0c;直接找项目练,这样进步是最快的。最近&#xff0c;我在网上看到360周董的一句话&#xff1a;“想干什么就去干&#xff0c;干得烂总比不干强&#xff01;…

代码随想论图论part06冗余连接

图论part06 冗余连接 代码随想录 冗余边就是已经边已经在并查集里了&#xff0c;从图的角度来说构成了环&#xff08;冗余连接2要用到这个概念&#xff09; 代码其他部分为&#xff1a;并查集初始化&#xff0c;查根&#xff0c;判断是否在集合里&#xff0c;加入集合 冗余…

企业高性能WEB服务器—Nginx

Nginx介绍 Nginx是一款轻量级的网页服务器、反向代理服务器以及电子邮件代理服务器。 具有高并发&#xff08;特别是静态资源&#xff09;、占用系统资源少的特性。它不仅是Web服务软件&#xff0c;还具有反向代理负载均衡功能和缓存服务功能 具备如下基本特性 可针对静态资…

Python MNE-Python 脑功能磁共振数据分析

一、什​​么​​是​​Python MNE-Python 脑​​功​​能​​磁​​共​​振​​数​​据​​分​​析 为大脑功能磁共振成像数据分析工具&#xff0c;致力于为神经科学研究提供便捷、高效的数据分析处理工具。MNE-Python提供了处理和分析脑电图&#xff08;EEG&#xff09;、…

DevExpressWinForms-AlertControl-使用教程

文章目录 AlertControl-使用教程一、将 AlertControl 添加到 Form二、编辑 AlertControl 的 HtmlTemplateHTML Template Editor介绍编辑HTML Template 三、使用AlertControl弹出AlertAlert中的按钮事件获取 Alert 标题等信息向Alert传递参数 总结源码 AlertControl-使用教程 一…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】电商数据分析案例-9.4 可视化报告输出

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 电商数据分析实战&#xff1a;基于PostgreSQL的可视化报告生成全流程9.4 可视化报告输出9.4.1 可视化报告设计框架9.4.1.1 报告目标与受众9.4.1.2 数据准备与指标体系 9.4.2…

屎上雕花系列-2nd

以下为“屎上雕花”的尝试2nd 使用Deepseek扩容而来&#xff0c;我竟然没有找到明显的错误&#xff0c;太强大了&#xff0c;工作改变生活了 LeCroy 以太网与 SAN 网络测试解决方案 硬件平台一&#xff1a;Xena 以太网流量生成器 Xena 以太网流量生成器是一款高性能的网络测…

MCP专题| 突破LLM三大瓶颈!模型上下文协议(MCP)如何重塑AI交互体验?

最近引爆了整个AI圈的Model Context Protocol&#xff08;MCP&#xff09;到底是什么&#xff1f;你是否也和小编一样一头雾水&#xff0c;不是说好的LLM风潮呢&#xff0c;怎么现在变成通信协议啦&#xff1f;最近小编也是找到一篇神仙综述&#xff0c;带你一遍搞清什么是MCP的…

我的AD快捷键方案【留存】

留存我的快捷键方案文件&#xff0c;以便换电脑的时候能够快速导入快捷键。 我的快捷键文件&#xff1a; 通过网盘分享的文件&#xff1a;JB20250509.DXPPrf 链接: https://pan.baidu.com/s/1t6V0GjdGFPNSFydP5Z_tfg?pwde4xs 提取码: e4xs 复制这段内容后打开百度网盘手机Ap…

Edwards爱德华STP泵软件用于操作和监控涡轮分子泵

Edwards爱德华STP泵软件用于操作和监控涡轮分子泵

QT6(35)4.8定时器QTimer 与QElapsedTimer:理论,例题的界面搭建,与功能的代码实现。

&#xff08;112&#xff09; &#xff08;113&#xff09;模仿随书老师给的源代码搭建的&#xff0c; LCD 显示的部分不一样 &#xff1a; &#xff08;114&#xff09;以下开始代码完善&#xff1a; 关联定时器的信号与槽函数 &#xff1a; &#xff08;115&#xff09;…

02 mysql 管理(Windows版)

一、启动及关闭 MySQL 服务器 1.1 通过 “服务” 管理工具 winr打开运行&#xff0c;输入services.msc 找到MySQL80&#xff0c;这个是我们在安装mysql的时候给的服务的名称&#xff0c;具体见文章mysql 安装 右键选择启动或者停止。 1.2 通过命令提示符 1.2.1 关闭命令…

不同渲染任务,用CPU还是GPU?

一、CPU与GPU渲染的核心差异与选型建议 CPU渲染的核心优势与适用场景 复杂场景处理能力&#xff1a;CPU凭借强大的多核性能&#xff08;如AMD Threadripper 3990x的64核&#xff09;和高内存容量&#xff08;最高支持512GB&#xff09;&#xff0c;擅长处理影视级光线追踪、全…

硅基计划 学习总结 拾贰

一、二级指针 难道指针也有分等级的吗&#xff0c;我们学过的指针要存放变量的地址的&#xff0c;那二级指针是干嘛的呢&#xff1f; 一级指针&#xff1a;int a 10; int *pa &a; 指针变量&#xff0c;它终究是个变量&#xff0c;也有自己的地址 那我们以后是不是可以通…