【JWT】jwt令牌研究

article/2025/10/16 17:58:30

一、JWT介绍

在介绍JWT之前先看一下传统校验令牌的方法,如下图:

  • 问题:

传统授权方法的问题是用户每次请求资源服务,资源服务都需要携带令牌访问认证服务去校验令牌的合法性,并根据令牌获取用户的相关信息,性能低下。为什么会说性能低下呢? 原因就是用户(客户端)请求资源服务,资源服务都需要携带令牌访问认证服务去校验令牌的合法性,要明确一来一回的请求和响应都是需要消耗时间的哦。

  • 解决方法:

使用JWT的思路是,用户认证通过后 会得到一个JWT令牌,JWT令牌中已经包括了用户相关的信息,客户端只需要携带JWT访问资源服务,资源服务根据事先约定的算法自行完成令牌校验(这就是比较厉害的哦),无需每次都请求认证服务完成授权(耗时短)。

JWT令牌授权过程如下图:

说半天了,还不知道什么是JWT令牌吧,请听老夫细细道来:

1.1 JWT概念

什么是JWT?

JSON Web Token(JWT)是一个开放的行业标准(RFC 7519),它定义了一种简介的、自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或使用RSA的公钥/私钥对来签名,防止被篡改。

英语比较好的同学,可以去官网看看哦(前提你必须能看老外的网站)。

官网:jwt.io/

标准:tools.ietf.org/html/rfc751…

我给你贴个图,慢慢看吧

1.2 JWT优缺点

JWT令牌的优点:

  1. jwt基于json,非常方便解析。
  2. 可以在令牌中自定义丰富的内容,易扩展。
  3. 通过非对称加密算法及数字签名技术,JWT防止篡改,安全性高。
  4. 资源服务使用JWT可不依赖认证服务即可完成授权。

缺点:

  • JWT令牌较长,占存储空间比较大。

二、令牌结构

通过学习JWT令牌结构为自定义jwt令牌打好基础。

JWT令牌由三部分组成(Header,Payload,Signature),每部分中间使用点(.)分隔,比如:xxxxx.yyyyy.zzzzz

2.1 Header

第二部分是头部包括令牌的类型(即JWT)及使用的哈希算法(如HMAC SHA256或RSA)

一个例子如下:

下边是Header部分的内容

{"alg": "HS256","typ": "JWT"
}
复制代码

将上边的内容使用Base64Url编码,得到一个字符串就是JWT令牌的第一部分。

2.2 Payload

第二部分是负载,内容也是一个json对象,它是存放有效信息的地方,它可以存放jwt提供的现成字段,比如:iss(签发者),exp(过期时间戳), sub(面向的用户)等,也可自定义字段。

此部分不建议存放敏感信息,因为此部分可以解码还原原始内容。

最后将第二部分负载使用Base64Url编码,得到一个字符串就是JWT令牌的第二部分。

一个例子:

{"sub": "1234567890","name": "456","admin": true
}
复制代码

2.3 Signature

第三部分是签名,此部分用于防止jwt内容被篡改。

这个部分使用base64url将前两部分进行编码,编码后使用点(.)连接组成字符串,最后使用header中声明签名算法进行签名。

一个例子:

 
HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)
复制代码

base64UrlEncode(header):jwt令牌的第一部分。

base64UrlEncode(payload):jwt令牌的第二部分。

secret:签名所使用的密钥。

三、JWT入门

Spring Security 提供对JWT的支持,本文我们使用Spring Security 提供的JwtHelper来创建JWT令牌,校验JWT令牌等操作。

生成私钥和公钥

JWT令牌生成采用非对称加密算法

3.1 生成密钥证书

下边命令生成密钥证书,采用RSA 算法每个证书包含公钥和私钥

keytool -genkeypair -alias jykey -keyalg RSA -keypass jiaoyu -keystore jy.keystore -storepass jiaoyukeystore

Keytool 是一个java提供的证书管理工具

-alias:密钥的别名

-keyalg:使用的hash算法

-keypass:密钥的访问密码

-keystore:密钥库文件名,jy.keystore保存了生成的证书

-storepass:密钥库的访问密码

查询证书信息:

keytool -list -keystore jy.keystore

删除别名

keytool -delete -alias jykey -keystore jy.keystore

3.2 导出公钥

openssl是一个加解密工具包,这里使用openssl来导出公钥信息。

安装 openssl:slproweb.com/products/Wi…

我的安装资料为 Win64OpenSSL-1_1_0g.exe

配置openssl的path环境变量(可以参考哦),本教程配置在D:\OpenSSL-Win64\bin

cmd进入jy.keystore文件所在目录执行如下命令:

bash keytool -list -rfc --keystore jy.keystore | openssl x509 -inform pem -pubkey

输入密钥库密码:

下边这一段就是公钥内容:

-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAijyxMdq4S6L1Af1rtB8SjCZHNgsQG8JTfGy55eYvzG0B/E4AudR2prSRBvF7NYPL47scRCNPgLnvbQczBHbBug6uOr78qnWsYxHlW6Aa5dI5NsmOD4DLtSw8eX0hFyK5Fj6ScYOSFBz9cd1nNTvx2+oIv0lJDcpQdQhsfgsEr1ntvWterZt/8r7xNN83gHYuZ6TM5MYvjQNBc5qC7Krs9wM7UoQuL+s0X6RlOib7/mcLn/lFLsLDdYQAZkSDx/6+t+1oHdMarChIPYT1sx9Dwj2j2mvFNDTKKKKAq0cv14Vrhz67Vjmz2yMJePDqUi0JYS2r0iIo7n8vN7s83v5uOQIDAQAB-----END PUBLIC KEY-----

将上边的公钥拷贝到文本文件中,合并为一行。

四、生成jwt令牌

在认证工程创建测试类,测试jwt令牌的生成与验证。

 
//生成一个jwt令牌
@Test
public void testCreateJwt(){//证书文件String key_location = "jy.keystore";//密钥库密码String keystore_password = "jiaoyukeystore";//访问证书路径ClassPathResource resource = new ClassPathResource(key_location);//密钥工厂KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(resource, keystore_password.toCharArray());//密钥的密码,此密码和别名要匹配String keypassword = "jiaoyu";//密钥别名String alias = "jykey";//密钥对(密钥和公钥)KeyPair keyPair = keyStoreKeyFactory.getKeyPair(alias,keypassword.toCharArray());//私钥RSAPrivateKey aPrivate = (RSAPrivateKey) keyPair.getPrivate();//定义payload信息Map<String, Object> tokenMap = new HashMap<>();tokenMap.put("id", "123");tokenMap.put("name", "mrt");tokenMap.put("roles", "r01,r02");tokenMap.put("ext", "1");//生成jwt令牌Jwt jwt = JwtHelper.encode(JSON.toJSONString(tokenMap), new RsaSigner(aPrivate));//取出jwt令牌String token = jwt.getEncoded();System.out.println("token="+token);
​
}
复制代码

五、验证jwt令牌

 
//资源服务使用公钥验证jwt的合法性,并对jwt解码@Testpublic void testVerify(){//jwt令牌String token ="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHQiOiIxIiwicm9sZXMiOiJyMDEscjAyIiwibmFtZSI6Im1ydCIsImlkIjoiMTIzIn0.KK7_67N5d1Dthd1PgDHMsbi0UlmjGRcm_XJUUwseJ2eZyJJWoPP2IcEZgAU3tUaaKEHUf9wSRwaDgwhrwfyIcSHbs8oy3zOQEL8j5AOjzBBs7vnRmB7DbSaQD7eJiQVJOXO1QpdmEFgjhc_IBCVTJCVWgZw60IEW1_Lg5tqaLvCiIl26K48pJB5f-le2zgYMzqR1L2LyTFkq39rG57VOqqSCi3dapsZQd4ctq95SJCXgGdrUDWtD52rp5o6_0uq-mrbRdRxkrQfsa1j8C5IW2-T4eUmiN3f9wF9JxUK1__XC1OQkOn-ZTBCdqwWIygDFbU7sf6KzfHJTm5vfjp6NIA";//公钥String publickey = "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAijyxMdq4S6L1Af1rtB8SjCZHNgsQG8JTfGy55eYvzG0B/E4AudR2prSRBvF7NYPL47scRCNPgLnvbQczBHbBug6uOr78qnWsYxHlW6Aa5dI5NsmOD4DLtSw8eX0hFyK5Fj6ScYOSFBz9cd1nNTvx2+oIv0lJDcpQdQhsfgsEr1ntvWterZt/8r7xNN83gHYuZ6TM5MYvjQNBc5qC7Krs9wM7UoQuL+s0X6RlOib7/mcLn/lFLsLDdYQAZkSDx/6+t+1oHdMarChIPYT1sx9Dwj2j2mvFNDTKKKKAq0cv14Vrhz67Vjmz2yMJePDqUi0JYS2r0iIo7n8vN7s83v5uOQIDAQAB-----END PUBLIC KEY-----";//校验jwtJwt jwt = JwtHelper.decodeAndVerify(token, new RsaVerifier(publickey));//获取jwt原始内容String claims = jwt.getClaims();//jwt令牌String encoded = jwt.getEncoded();System.out.println(encoded);}
复制代码

到这里本文就告一段落了,如果的新的内容将会随时更新的,尽请关注。

如果感觉写的好,确实帮助了你,那就麻烦帮忙点个赞,多谢!

、、


http://chatgpt.dhexx.cn/article/Z0bxB555.shtml

相关文章

JWT令牌验证

JWT令牌验证 jwt的由来及解决的问题JWT的工作原理JWT组成重点&#xff1a;JWT实现验证&#xff1a;4.1 首先前后端跨域配置&#xff1a;4.2 jwt配置&#xff1a;4.3 web.xml配置&#xff1a;4.4 登录成功时生成jwt令牌前端NodeJs服务器配置拦截器&#xff0c;配置在http目录下4…

如何使用JSON Web令牌(JWT)保护您的文档

如何使用JSON Web令牌&#xff08;JWT&#xff09;保护您的文档 在本文中&#xff0c;我们讲解如何使用JSON网络令牌JWT来保护在线文档免受未经授权的访问&#xff0c;从而可以更安全的把在线文档编辑器开发集成进您自己的网络应用中去。 这里将集成开源的办公套件ONLYOFFICE …

day13 SpringBoot案例3 令牌技术、登录校验

登录校验的实现思路是怎样的&#xff1f; 项目中访问核心资源&#xff0c;通常都要进行登录校验&#xff0c;访问京东商城的订单&#xff0c;必须要先登录才能访问查询 实现思路: 可以在访问资源前进行访问的拦截&#xff0c;判断你当前会话是否有登录&#xff0c;如果没有登…

pythonjson数据解析失败_json解析失败是什么意思

因为代码的不美观等因素&#xff0c;我们会使用一些解析工具进行处理&#xff0c;有些人在解析时出现了报错。解析失败需要考虑多方面的因素&#xff0c;如格式、String类型、boolean类型等原因&#xff0c;在格式上分为格式错误和格式正确两种讨论。下面就json解析失败的原因为…

Java Web Token令牌校验

前言&#xff1a;本文只涉及JWT的理论部分&#xff0c;不涉及代码 传统的用户校验可以结合cookiesession来实现&#xff0c;但是校验信息存放在服务端&#xff0c;当用户过多时会给服务器造成太大的压力&#xff0c;所以我们可以使用token进行校验&#xff0c;将用户信息加以签…

JWT令牌生成与校验

目录 1 JWT介绍1.1 什么是JWT&#xff1f;1.2 JWT令牌结构 2 配置JWT令牌服务3 生成JWT令牌4 校验JWT令牌5 JWT整合Spring Security5.1 创建表 6 配置授权服务6.1 测试 1 JWT介绍 通过上边的测试我们发现&#xff0c;当资源服务和授权服务不在一起时资源服务使用RemoteTokenSe…

信息系统基础知识(笔记)

一、信息 1.1、信息的基本概念 信息就是信息&#xff0c;既不是物质们也不是论量&#xff0c;信息是能够用来消除不确定的东西 两个概念层次&#xff1a;本体论&#xff08;客观层&#xff0c;与课客体本身因素相关&#xff0c;与主题因素无关&#xff09; 认知论&#xff0…

计算机毕业论文内容参考|基于大数据的信息物理融合系统的分析与设计方法

文章目录 导文摘要前言绪论课题背景国内外现状与趋势:课题内容:相关技术与方法介绍:系统架构设计:数据采集与处理:数据存储与管理:数据分析与挖掘:系统优化与调试:应用场景:挑战与机遇:研究方向:系统分析:系统设计:系统实现:系统测试:总结与展望:

工业4.0中的人-信息-物理系统集成(HSI):设计与评估方法

于栖洋 译 摘要:本文概述了工业4.0中集成人和信息物理系统的设计和使用空间&#xff0c;特别关注分析、设计和评估方法和阶段的相互作用。本文首先介绍了工业4.0面临的挑战&#xff0c;综述了现有的系统设计方法&#xff0c;描述了方法模型的设计和使用空间&#xff0c;并以工…

信息系统基本知识(六)

大纲 信息系统与信息化信息系统开发方法常规信息系统集成技术软件工程新一代信息技术信息系统安全技术信息化发展与应用信息系统服务管理信息系统服务规划企业首席信息管及其责任 1.7 信息化发展与应用 我国在“十三五”规划纲要中&#xff0c;将培育人工智能、移动智能终端…

Unity物理系统(一)物理系统相关组件

一、物理系统相关组件 Unity中的物理系统涉及的组件分为如下几类&#xff1a; 刚体角色控制器碰撞体布料关节力场 二、刚体&#xff08;Rigidbody&#xff09; Rigidbody&#xff08;刚体&#xff09;组件可以使游戏对象在物理系统的控制下进行运动&#xff0c;Rigidbody …

工业信息物理系统测试验证平台(ETest_CPS)

1.产品简介 ETest_CPS是基于ETest Studio开发出的工业信息物理系统测试验证平台&#xff08;Embedded System Test Studiofor Cyber-Physical System,简称&#xff1a;ETest_CPS&#xff09;。ETest_CPS由软件和硬件组成&#xff0c;软件采用ETest&#xff0c;硬件包括测试机柜…

信息化与信息系统5

信息系统规划 大型信息系统的特点 考点&#xff1a; 具体包括以下6点&#xff1a; 规模庞大&#xff0c;跨地域性&#xff0c;网络结构复杂&#xff0c;业务种类多&#xff0c;数量大&#xff0c;用户多。 信息系统规划方法 规划流程 1. 分析企业信息化的现状 2. 制定企…

信息物理社会融合系统:一种以数据为中心的框架

信息物理社会融合系统&#xff1a;一种以数据为中心的框架 翟书颖1, 郭斌2, 李茹1, 王庭良1, 於志文2, 周兴社2 1. 西北工业大学明德学院&#xff0c;陕西 西安 710129 2. 西北工业大学计算机学院&#xff0c;陕西 西安 710129 摘要&#xff1a;信息物理社会融合系统连接信息空…

ETest_CPS——工业信息物理系统测试验证平台

1&#xff09;产品简介 ETest_CPS是一款工业信息物理系统测试验证平台&#xff08;Embedded System Test Studio for Cyber-Physical System,简称&#xff1a;ETest_CPS&#xff09;。ETest_CPS由软件和硬件组成&#xff0c;软件采用ETest&#xff0c;硬件包括测试机柜、测试主…

信息物理系统-Rijndael加密算法的实现

信息物理系统-Rijndael加密算法的实现&#xff1a; 概述&#xff1a; AES标准的Rijndael算法是一种分组加密算法&#xff0c;本次实验通过PtolemyII软件&#xff0c;实现了明文长度为128位&#xff0c;密钥长度为128位的Rijndael加密算法。 实验的完成采取自底向上的&#x…

信息化与信息系统4

信息安全概念 安全分层 信息安全分为4层&#xff1a;设备安全&#xff0c;数据安全&#xff0c;内容安全&#xff0c;行为安全 会给出某些特性&#xff0c;要求反向选择是属于哪一层。 信息系统的安全保护等级 第一级&#xff1a;对个人&#xff0c;公司造成损害 第二级&a…

物理系统(一)

物理系统主要由以下几部分组成&#xff1a;Rigidbody&#xff08;刚体&#xff09;、Character Controller&#xff08;角色控制器&#xff09;、Collider&#xff08;碰撞器&#xff09;、Cloth&#xff08;布料&#xff09;、Joint&#xff08;关节&#xff09; 如图&#xf…

计算机信息系统

一、概念 &#xff08;1&#xff09; 计算机信息系统&#xff08; Computer_based Information System &#xff0c;简称信息系统&#xff09;是一类以提供信息服务 为主要目的的数据密集型、人机交互的计算机应用系统。 &#xff08;2&#xff09;由计算机及其相关的和配套的…

物理服务器的信息,信息物理系统

信息物理系统(CPS,Cyber-Physical Systems)是一个综合计算、网络和物理环境的多维复杂系统&#xff0c;通过3C(Computation、Communication、Control)技术的有机融合与深度协作&#xff0c;实现大型工程系统的实时感知、动态控制和信息服务。CPS实现计算、通信与物理系统的一体…