当前位置: 首页 > article >正文

Shiro(八):JWT介绍

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 进行编码,如下所示:

//生成JWTtoken = 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)使用强密钥

相关文章:

Shiro(八):JWT介绍

1、什么是JWT&#xff1f; JWT&#xff08;JSON Web Token&#xff0c;JSON Web令牌&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在网络应 用环境间安全地传递声明&#xff08;claims&#xff09;作为JSON对象&#xff1b;JWT会按指定的加密算…...

【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…...

SCDN是什么?

SCDN是安全内容分发网络的简称&#xff0c;它在传统内容分发网络&#xff08;CDN&#xff09;的基础上&#xff0c;集成了安全防护能力&#xff0c;旨在同时提升内容传输速度和网络安全性。 SCDN的核心功能有&#xff1a; DDoS防御&#xff1a;识别并抵御大规模分布式拒绝服务…...

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…...

buck和boost总结

目录 1. 基本概念与原理 2. 工作模式 3. 典型应用场景 4. Buck-Boost电路&#xff1a;升降压结合 5. 核心区别与选择 1. 基本概念与原理 Buck电路&#xff08;降压电路&#xff09; 通过开关器件&#xff08;如MOSFET&#xff09;周期性地导通和关断&#xff0c;控制电感充…...

Ansible内置模块之package

原创&#xff1a;厦门微思网络 Ansible内置模块之 package ansible.builtin.package 模块用于管理基于 Linux 系统上的软件包。它是一个通用模块&#xff0c;支持多个包管理器&#xff08;如 apt、yum、dnf、zypper 等&#xff09;&#xff0c;可以安装、更新和删除软件包。其…...

RISC-V AIA SPEC学习(五)

第六章 Interrupts for Virtual Machines(VS Level) 核心内容 1.VS级别外部中断支持:​​ ​​客户中断文件(Guest Interrupt File)​​:虚拟机的每个vCPU拥有独立的IMSIC中断文件,允许直接接收设备MSI。​​vstopi CSR​​:类似stopei,用于虚拟机内部处理最高优先级中…...

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

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

CVE-2025-24813:Apache Tomcat RCE 漏洞分析

CVE-2025-24813 是 Apache Tomcat 中的一个严重远程代码执行 (RCE) 漏洞,源于路径等效缺陷,允许攻击者绕过安全约束并远程执行任意代码。 CYFIRMA 的研究发现了一些活跃的漏洞利用,一些 PoC 漏洞在地下论坛上流传。攻击者利用基于 HTTP PUT 的任意文件上传、NTFS 连接漏洞利…...

vscode 配置doxygen注释和snippet

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

分析 Docker 磁盘占用

以下是分析 Docker 磁盘占用的详细步骤和工具指南&#xff0c;帮助开发者快速定位和清理冗余数据&#xff1a; 1. 查看 Docker 磁盘使用概览 docker system df 输出说明&#xff1a; TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 15 …...

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

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

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

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

MySQL 数据库操作

目录 一、 MySQL 数据库介绍 二、 MySQL 库操作 1. 系统数据库 2. 数据库操作 三、 MySQL 表操作 1. 表介绍 2. 查看表 3. 创建表 4. 查看表结构 5. 修改表 6. 删除表 四、 MySQL 数据操作 4.1 单表查询 4.2 多表查询 一、 MySQL 数据库介绍 数据库目前标准的指令…...

企业高性能WEB服务器—Nginx

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

C++跨平台开发实践:深入解析与常见问题处理指南

一、跨平台开发基础架构设计 1.1 跨平台架构的核心原则 分层设计模式&#xff1a; 平台抽象层(PAL)&#xff1a;将平台相关代码集中管理 核心逻辑层&#xff1a;完全平台无关的业务代码 平台实现层&#xff1a;针对不同平台的特定实现 代码组织最佳实践&#xff1a; pro…...

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-使用教程 一…...

SurfSense开源程序是NotebookLM / Perplexity / Glean的开源替代品,连接到外部来源,如搜索引擎

​一、软件介绍 文末提供程序和源码下载 虽然 NotebookLM 和 Perplexity 等工具令人印象深刻&#xff0c;并且对于对任何主题/查询进行研究都非常有效&#xff0c;但 SurfSense 通过与你的个人知识库集成来提升这种能力。它是一个高度可定制的 AI 研究代理&#xff0c;连接到外…...

【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…...

uni-app,小程序自定义导航栏实现与最佳实践

文章目录 前言为什么需要自定义导航栏&#xff1f;基本实现方案1. 关闭原生导航栏2. 自定义导航栏组件结构3. 获取状态栏高度4. 样式设置 内容区域适配跨平台适配要点iOS与Android差异处理 常见导航栏效果实现1. 透明导航栏2. 滚动渐变导航栏3. 自定义返回逻辑 解决常见问题1. …...

解决osx-arm64平台上conda默认源没有提供 python=3.7 的官方编译版本的问题

CONDA_SUBDIRosx-64 conda create -n py37_env python3.7 是一个用于创建特定架构环境的命令&#xff0c;主要针对 macOS 系统。下面为你详细解析它的功能和作用&#xff1a; 命令功能解析 这个命令的主要功能是创建一个名为 py37_env 的 Conda 环境&#xff0c;并且指定该环…...

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

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

vue内写websocket实时订阅

首先安装插件reconnecting-websocket 或者不安装也可以&#xff0c;这个插件只是在断连之后可以重新连接 引入插件 import ReconnectingWebSocket from reconnecting-websocket;。 js文件&#xff1a; export const WebSocketClass (url, params, successFn, errorFn, clo…...

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

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