JWT

JWT(跨域身份验证解决方案) 因为json的通用性,所以JWT是可以进行跨语言支持的,像JAVA、JavaScript、NodeJS、PHP等很多语言都可以使用。因为有了payload部分,所以JWT可以在自身存储一些其他业务逻辑所必要的非敏感信息。便于传输,jwt的构成非常简单,字节占用很小,所以它是非常便于传输的。它不需要在服务端保存会话信息, 所以它易于应用的扩展相比传统token的优势? 阅读详情

JWT是什么

JSON Web Token (JWT),它是目前最流行的跨域身份验证解决方案

为什么使用JWT(可针对资源访问限制问题)

JWT的精髓在于:“去中心化”,数据是保存在客户端的。

传统的:
在这里插入图片描述
JWT解决的:在这里插入图片描述

JWT的工作原理

  1. 是在服务器身份验证之后,将生成一个JSON对象并将其发送回用户,示例如下:
    {“UserName”: “Chongchong”,“Role”: “Admin”,“Expire”: “2018-08-08 20:15:56”}

  2. 之后,当用户与服务器通信时,客户在请求中发回JSON对象

  3. 为了防止用户篡改数据,服务器将在生成对象时添加签名,并对发回的数据进行验证

JWT组成

一个JWT实际上就是一个字符串,它由三部分组成:
头部(Header)、载荷(Payload)与签名(signature)

JWT结构原理图:
在这里插入图片描述
JWT实际结构:eyJhbGciOiJIUzI1NiJ9. eyJzdWIiOiJ7fSIsImlzcyI6InpraW5nIiwiZXhwIjoxNTYyODUwMjM3LCJpYXQiOjE1NjI4NDg0MzcsImp0aSI6ImM5OWEyMzRmMDc4NzQyZWE4YjlmYThlYmYzY2VhNjBlIiwidXNlcm5hbWUiOiJ6c3MifQ.
WUfqhFTeGzUZCpCfz5eeEpBXBZ8-lYg1htp-t7wD3I4

 它是一个很长的字符串,中间用点(.)分隔成三个部分。
 注意,JWT 内部是没有换行的,这里只是为了便于展示,
 将它写成了几行。
 写成一行,就是下面的样子:Header.Payload.Signature

① Header
{“typ”:“JWT”,“alg”:“HS256”}
这个json中的typ属性,用来标识整个token字符串是一个JWT字符串;它的alg属性,用来说明这个JWT签发的时候所使用的签名和摘要算法
typ跟alg属性的全称其实是type跟algorithm,分别是类型跟算法的意思。之所以都用三个字母来表示,也是基于JWT最终字串大小的考虑,
同时也是跟JWT这个名称保持一致,这样就都是三个字符了…typ跟alg是JWT中标准中规定的属性名称

②Payload(负荷)
{“sub”:“123”,“name”:“Tom”,“admin”:true}
payload用来承载要传递的数据,它的json结构实际上是对JWT要传递的数据的一组声明,这些声明被JWT标准称为claims,
它的一个“属性值对”其实就是一个claim(要求),
每一个claim的都代表特定的含义和作用。

  注1:英文“claim”就是要求的意思
  
  注2:如上面结构中的sub代表这个token的所有人,存储的是所有人的ID;
  name表示这个所有人的名字;admin表示所有人是否管理员的角色。
  当后面对JWT进行验证的时候,这些claim都能发挥特定的作用
  
  注3:根据JWT的标准,这些claims可以分为以下三种类型:
       A. Reserved claims(保留)
          它的含义就像是编程语言的保留字一样,
          属于JWT标准里面规定的一些claim。
          JWT标准里面定义好的claim有:
              iss(Issuser):代表这个JWT的签发主体; 
              sub(Subject):代表这个JWT的主体,即它的所有人; 
              aud(Audience):代表这个JWT的接收对象; 
              exp(Expiration time):是一个时间戳,代表这个JWT的过期时间; 
              nbf(Not Before):是一个时间戳,代表这个JWT生效的开始时间,意味着在这个时间之前验证JWT是会失败的; 
              iat(Issued at):是一个时间戳,代表这个JWT的签发时间; 
              jti(JWT ID):是JWT的唯一标识。 
       
       B. Public claims,略(不重要)

       C. Private claims(私有)
          这个指的就是自定义的claim,
          比如前面那个示例中的admin和name都属于自定的claim。
          这些claim跟JWT标准规定的claim区别在于:JWT规定的claim,
          JWT的接收方在拿到JWT之后,都知道怎么对这些标准的claim进行验证;
          而private claims不会验证,除非明确告诉接收方要对这些claim进行验证以及规则才行
          
          按照JWT标准的说明:保留的claims都是可选的,在生成payload不强制用上面的那些claim,你可以完全按照自己的想法来定义payload的结构,不过这样搞根本没必要:
          
          第一是,如果把JWT用于认证, 那么JWT标准内规定的几个claim就足够用了,甚至只需要其中一两个就可以了,假如想往JWT里多存一些用户业务信息,
          比如角色和用户名等,这倒是用自定义的claim来添加;第二是,JWT标准里面针对它自己规定的claim都提供了有详细的验证规则描述,
          每个实现库都会参照这个描述来提供JWT的验证实现,所以如果是自定义的claim名称,那么你用到的实现库就不会主动去验证这些claim

③ signature
签名是把header和payload对应的json结构进行base64url编码之后得到的两个串用英文句点号拼接起来,然后根据header里面alg指定的签名算法生成出来的。
算法不同,签名结果不同。以alg: HS256为例来说明前面的签名如何来得到。

   按照前面alg可用值的说明,HS256其实包含的是两种算法:HMAC算法和SHA256算法,前者用于生成摘要,后者用于对摘要进行数字签名。这两个算法也可以用HMACSHA256来统称    

JWT的验证过程

它验证的方法其实很简单,只要把header做base64url解码,就能知道JWT用的什么算法做的签名,然后用这个算法,再次用同样的逻辑对header和payload做一次签名,并比较这个签名是否与JWT本身包含的第三个部分的串是否完全相同,只要不同,就可以认为这个JWT是一个被篡改过的串,自然就属于验证失败了。

接收方生成签名的时候必须使用跟JWT发送方相同的密钥

注1:在验证一个JWT的时候,签名认证是每个实现库都会自动做的,
但是payload的认证是由使用者来决定的。
因为JWT里面可能会包含一个自定义claim,
所以它不会自动去验证这些claim,以jjwt-0.7.0.jar为例:
    A 如果签名认证失败会抛出如下的异常:
      io.jsonwebtoken.SignatureException: JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted.
  即签名错误,JWT的签名与本地计算机的签名不匹配 
    B JWT过期异常
      io.jsonwebtoken.ExpiredJwtException: JWT expired at 2017-06-13T11:55:56Z. Current time: 2017-06-13T11:55:57Z, a difference of 1608 milliseconds.  Allowed

注2:认证失败,返回401 Unauthorized响应

注3:认证服务作为一个Middleware HOOK 对请求进行拦截,首先在cookie中查找Token信息,如果没有找到,则在HTTP Authorization Head中查找

JWT令牌刷新思路

1 ,登陆成功后,将生成的JWT令牌通过响应头返回给客户端

2, WEB APP项目每次请求后台数据时(将JWT令牌从请求头中带过来),
验证通过,刷新JWT,并保存在响应头返回给客户端,有效时间30分钟
JwtFilter

注1:修改CorsFilter添加允许的新的请求头“jwt”
注2:原来在默认的请求上, 浏览器只能访问以下默认的 响应头
   Cache-Control
   Content-Language
   Content-Type
   Expires
   Last-Modified
   Pragma
   如果想让浏览器能访问到其他的 响应头的话 需要在服务器上设置 Access-Control-Expose-Headers
   Access-Control-Expose-Headers : 'jwt' 

   // CorsFilter 允许客户端,发一个新的请求头jwt
   resp.setHeader("Access-Control-Allow-Headers", "Origin,X-Requested-With, Content-Type, Accept, jwt");

注3:axios从响应头获得jwt令牌并保存到vuex
   这里有个问题如何获得项目中Vue的根实例,解决方案:修改main.js
   window.vm = new Vue({...});

   其它vuex的操作就照旧鸟~~~~~~~~~~~~~~~~~~~~~~~事了拂衣去,深藏身与名

注4:写在最后的话鸟~~~退出系统请清空vuex中的内容哦

注5:写在最后最后的话鸟~~~刷新页面会导致vuex中的state清空
浅析JWT| JWT是啥子,Java构建JWT 小声bbb 说到系统的安全识别,记得自己第一个项目,用的就是session,用户登录进来以后,给他session标记登录,记录id进去,轻轻松松,设计的操作也很简单,类似操作HashMap。 这大概也有1年多快两年了,现在回头看真的是可怕,几乎在裸奔 众所周知,平常使用的Session是存储在服务器的一种技术,可以理解为一个会话id,每次使用HTTP请求,都会携带一个sessionId,服务器根据这个SessionId去找对应的session しかし,我预判了你的预判 第三方完全可以随便输入一个sess 阅读详情

相关推荐

【JWT】入门 *JWT*,并封装一个实用的 *JWT* 工具类

JSON Web 令牌 (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且独立的方式,**用于将信息作为 JSON 对象在各方之间安全地传输** 。此信息可以被验证和信任,因为它是经过数字签名的。JWT 可以使用密钥(使用 **HMAC** 算法)或使用 **RSA** 或 **ECDSA** 的公钥/私钥对进行签名。

ebb29bbe的博客 3129

Vue之jwt(跨域身份验证,令牌)

1. JWT是什么 JSON Web Token (JWT),它是目前最流行的跨域身份验证解决方案 2. 为什么使用JWT JWT的精髓在于:“去中心化”,数据是保存在客户端的。 3. JWT的工作原理 1. 是在服务器身份验证之后,将生成一个JSON对象并将其发送回用户,示例如下: {"UserName": "Chongchong","Role": "Admin","Expire": "2018-08-08 20:15:56"} 2. 之后,当用户...

qq_65975514的博客 4864

JWT结构详解与JWT设置

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务端生成一个token并返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。JWT是 JSON Web Tokens 的简称,从单词可以看出它也是一种 token,其实可以理解为一种生成token的框架或规范。

Sup星月★然的博客 1991

vue-element-admin开发后台权限模块

本课程是基于vue-element-admin实现的后台权限验证系统,解决在前后端分离场景下如何实现前端菜单访问的动态权限以及如何在脚手架中进行接口的封装调用,您将学习到如下知识: 1、学习如何使用后台集成框架vue-element-admin进行后台前端框架的搭建;2、学习如何在vue-element-admin中使用element-ui组件,学习到后台通用列表页面的制作方式;3、学习如何在前后端分离下,实现前端菜单的动态权限,如何进行请求的统一拦截;4、学习基于JWT的登陆认证流程;5、学习到前端项目的前后端联调,如何在服务器层解决前后端分离引起的跨域问题;6、学习如何在响应拦截器里自定义各类错误提示

多种方法o.jsonwebtoken.ExpiredJwtException: JWT expired at xxx. Current time: xxx的错误

多种方法o.jsonwebtoken.ExpiredJwtException: JWT expired at xxx. Current time: xxx的错误,比如io.jsonwebtoken.ExpiredJwtException: JWT expired at 2023-04-11T14:59:18+0800. Current time: 2023-04-11T15:16:30+0800

念兮为美 3727

【项目实战】一、Spring boot整合JWT、Vue案例展示用户鉴权

案例整合了Spring boot、Spring Cloud alibaba、Gateway、Nacos discovery、Nacos config、openFeign、JWT、Vue3、Router、Axios等;通过JWT和登录、查询(带用户信息)接口,验证了上述工具以及鉴权功能。

Java 技术专栏,从入门到精通,熟悉企业级开发 9297

JWT详解

本文从本人博客搬运,原文格式更加美观,可以移步原文阅读:JWT详解 JWT简介 1.什么是JWT 在介绍JWT之前,我们先来回顾一下利用token进行用户身份验证的流程: 客户端使用用户名和密码请求登录 服务端收到请求,验证用户名和密码 验证成功后,服务端会签发一个token,再把这个token返回给客户端 客户端收到token后可以把它存储起来,比如放到cookie中 客户端每次向服务端请求资源时需要携带服务端签发的token,可以在cookie或者header中携带 服务端收到请求,然后去验证客户端请

baobao的博客 28万+

Uniapp+Vue3+Monorepo:如何优化你的前端开发流程(附完整配置代码)

本文详细介绍了如何利用Uniapp+Vue3+Monorepo技术栈优化前端开发流程,提升代码可维护性和团队协作效率。通过Monorepo架构实现依赖管理智能化、代码复用最大化和构建流程统一化,结合完整配置代码和实战指南,帮助开发者快速构建高性能跨端应用。

weixin_29011993的博客 452

什么是JWT?深入理解JWT从原理到应用

JWT(JSON Web Token)是一种用于在网络应用间传递和验证信息的开放标准(RFC 7519)。它通过使用数字签名或加密,将一些声明式的信息进行编码,生成一个经过验证的令牌。JWT主要由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。

万维网连五洲,二进制写尽天下事,喜欢结识新伙伴寻找志同道合的朋友,欢迎一起探讨学习 8008

扩视机器视觉—Halcon机器视觉48个实战项目六(检测定位角度)

此项目halcon检测检测定位角度问题,并显示。

qq_21516871的博客 1093

Windows防火墙服务异常修复指南:0x80070422与0x6D9报错实战处理

本文针对Windows防火墙服务异常导致的0x80070422与0x6D9报错,提供了从基础到进阶的实战修复指南。核心是通过services.msc服务管理器检查并修复Windows Firewall服务,包括设置启动类型、检查依赖服务等关键步骤。同时介绍了当基础方法失效时,如何使用命令行工具、系统文件检查器(SFC/DISM)以及排查组策略与第三方软件冲突等深度解决方案,帮助用户彻底解决防火墙服务无法启动或访问的问题。

m9n0o的博客 542

JWT及JWT伪造

文章目录JWT简介传统的Session认证基于token的鉴权机制JWT的构成头部(header)载荷(payload)签证(signature)通过JWT 进行认证JWT token破解绕过JWT伪造Bukgu jwt——JWT伪造 JWT简介 Json web token (JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519)。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被

qq_45521281的博客 1万+

5分钟搞定!用FunASR在本地快速部署达摩院Paraformer语音识别模型

本文提供了一份快速部署指南,教你如何在5分钟内利用FunASR工具包在本地电脑上启动达摩院Paraformer语音识别模型。Paraformer作为一款非自回归端到端模型,以其推理速度快、识别精度高的特点,结合FunASR的一键式模型加载和统一API,让开发者能轻松构建本地语音识别系统,极大降低了前沿AI技术的应用门槛。

q9w8e7r6t5的博客 604

jwt

文章目录介绍JWT的验证过程实例 在之前的项目中,大部分网页是通过session来判断用户是否有权限来访问个别网页的,但是如果是SPA项目的话,前后端分离,客户请求的是前端,所以并不会保存数据到session,那该怎么办呢? 针对这一问题,可以使用jwt来解决! 介绍 JWT也就是JSON Web Token(JWT),是目前最流行的跨域身份验证解决方案。 JWT的组成: 一个JWT实际上就是一个...

大屌的博客 9679

Mamba再封神!与YOLO结合,拿下二区!好发不卷!

相比传统的YOLO改进,Mamba是新技术,两者结合尚在蓝海阶段,可发挥空间大!更为关键的是,它在检测精度和速度方面,都让以往的YOLO模型难以望其项背!比如代表模型Mamba YOLO,便在参数减少45.5%、FLOPs减少50%的同时,精度还比YOLOv8高6.1%!这主要得益于,Mamba能够捕捉长期依赖关系,而YOLO则擅长捕捉局部特征,两者能够优势互补,且Mamba线性复杂度的特性,也有利于提高计算效率!为了让大家能够紧跟前沿发展,找到更多灵感启发,我给大家10种。

2401_88190197的博客 2506

Altium Designer操作技巧(1)——原理图中如何批量替换元器件?

《AltiumDesigner批量替换元器件技巧分享》摘要:本文介绍了两种在AltiumDesigner中批量替换元器件的实用方法。方法一通过“查找相似对象”功能,可精准匹配并批量修改器件参数;方法二利用ActiveBOM功能,在BOM表中直观操作器件替换,推荐使用第二种方法可使BOM管理更高效。这些技巧能有效减少物料种类、降低贴装成本,特别适用于电阻电容等常用器件的批量替换。关注公众号获取更多电子设计技巧。

u012526819的博客 2576

JWT简介、JWT优缺点、JWT使用方法、.NET6使用JWT示例、JWT与Session对比

JWT简介、JWT优缺点、JWT使用方法、.NET6使用JWT示例、JWT与Session对比

1万+

串行RapidIO(Serial RapidIO,SRIO):协议介绍

目录一、RapidIO背景介绍二、RapidIO协议概述2.1 包与控制符号2.2 包格式2.4 消息传递2.5 全局共享存储器2.6 流量控制2.7 串行物理层三、I/O逻辑操作与包格式四、维护操作与包格式五、消息操作与包格式六、总结 本文是基于Xilinx平台SRIO介绍(一)RapidIO协议介绍的内容作读书笔记。 一、RapidIO背景介绍 RapidIO采用三层分级体系结构,包括逻辑层、传输层和物理层该分级结的如下图所示: ● 逻辑层:位于最高层,定义全部协议和包的格式,它们为端点器件发起和完

Starry__的博客 1万+

JWT 教程_1 SpringBoot与JWT整合

https://gitee.com/fakerlove/spring-security 文章目录1. 介绍2. SpringBoot与JWT整合2.1 JWT的结构:2.2 JWT的使用测试:1) java-jwt 版本2) jjwt 版本检验过期时间自定义claim2.3 SpringBoot与JWT整合: 1. 介绍 https://jwt.io/ Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为

wujing1_1的博客 4万+

2026必学:LangChain+Playwright爬虫,赋能RAG智能问答系统

RAG(检索增强生成)智能问答系统的效果,80%取决于数据源的质量。2026年,LangChain与Playwright的组合成为企业级RAG数据采集的黄金搭档:LangChain提供标准化的RAG数据处理链路,Playwright解决动态网页渲染的核心痛点,两者结合能高效采集、结构化处理各类网页数据(动态渲染页、复杂交互页、反爬页),为RAG系统提供高质量语料。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1705

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JWT教程【JWT】

JWT教程【JWT】

小心星的博客 1196

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【JWT】快速了解什么是jwt及如何使用jwt

是一种用于在网络应用间安全传递声明(claim)的开放标准。和。头部主要包含了用于描述 JWT 类型以及所使用的签名算法的信息。载荷包含了需要传递的声明(claim),比如用户身份、权限等信息。签名则是对头部、载荷和一个密钥进行的签名,用于验证数据的完整性。

无法自律的人的博客 1597

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JWT — JWT原理解析及实际使用

一、JWT 1、JWT介绍 JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用户登录。在传统的用户登录认证中,因为http是无状态的,所以都是采用session方式。用户登录成功,服务端会保存一个session,服务端会返回给客户端一个sessionId,客户端会把sessionId保存在cookie中,每次请求都会携带这个sessionId。

qq_38658567的博客 1万+

JWT简介& JWT结构& JWT示例& 前端添加JWT令牌功能& 后端程序

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。

qq_73126462的博客 1万+
上一篇: Vuex
下一篇: Svn
water_java
博客等级 码龄7年 9粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值