JWT的登录认证与自校验原理分析

目录

一、JWT的概述

1.什么是JWT?

2.JWT的用户认证

3.JWT解决了什么问题?

4.关于JWT中的签名如何理解?

5.JWT的优势

二、JWT的结构

1.令牌的组成:

2.JWT的工具类

3.JWT所需的依赖

4.JWT登录生成Token的原理

三、JWT的自校验

1.什么是JWT的自校验?


一、JWT的概述

1.什么是JWT?

JWT是一个含签名并且携带用户相关信息的加密串,用户输入相关信息进行登录的时候,如果信息验证成功,会生成一个JWT(Token令牌),并且将这个token返回给前端保存到本地,当进行其他的请求api的时候,将这个Token带给后端,并且拦截器对请求进行拦截,验证这个Token,如果验证Token无误则放行这个请求,进行相应的业务逻辑处理,显示数据;有误则返回错误信息,跳转登陆界面

2.JWT的用户认证

3.JWT解决了什么问题?

授权因为JWT中包含用户的相关信息(如用户名或者用户ID),所以通过JWT的用户信息,服务可以确定用户的身份,一旦用户的身份验证成功后,系统就会授予它们一组权限来访问资源

信息交换:JWT可以签名,所以可以验证数据在传输过程中是否被篡改或伪造,这有助于去报信息的真实性和完整性

4.关于JWT中的签名如何理解?

想象一封信,在传输过程中,你希望确保这封信没有被别人篡改。为了做到这一点,你可以在信封上盖上你的个人印章(签名),这个印章只有你知道如何制作。当收信人收到信时,他可以检查印章是否有效,以确定信件没有被任何人打开或篡改过。

在网络通信中,签名密码就像这个个人印章。它是一个秘密的密钥,只有发送者和接收者知道。发送者使用签名密码对数据进行签名,生成一个数字签名,这个数字签名就像印章。接收者使用相同的密钥来验证数字签名,以确保数据在传输过程中没有被篡改或伪造。这有助于确保数据的完整性和真实性。

5.JWT的优势

1.简洁:可以通过URL, POST 参数或者在 HTTP header 发送,因为数据量小,传输速度快

2.自包含:负载中包含了所有用户所需要的信息,避免了多次查询数据库

3.自校验:对token可以自己校验是否过期

二、JWT的结构

1.令牌的组成:

  • 标头(Header):标头通常由两部分组成:令牌的类型(即JWT)和所使用的签名算法

  • 有效载荷(Payload):设置用户自定义信息,过期时间,面向的用户 接收方签发时间

  • 签名(Signature):使用 header 中指定的签名算法(HS256)进行签名。签名的作用是保证 JWT 没有被篡改过。

2.JWT的工具类

public class JWTUtils {//这个作为JWT的签名密钥private static String sign="ddz";//封装了创建Token的操作public static String createToken(Map<String,String >map){//1.设置超时时间、确保操作不会无限期持续下去,提高系统的安全性和效率Calendar calendar=Calendar.getInstance();  //创建一个calendar对象calendar.add(Calendar.DATE,7);    //设置JWT过期时间7天//2.创建JWTbuilder对象,这个对象用来构建JWT的JWTCreator.Builder builder= JWT.create();//3.通过JWTbuild对象构建TokenString token=builder//        .withHeader(map) //设置标头,可以不设置有默认值.withClaim("name",map.get("name")).withClaim("pwd",map.get("pwd")) //设置用户自定义信息(负载).withExpiresAt(calendar.getTime()) //设置令牌过期时间.sign(Algorithm.HMAC256(sign));    //设置用户签名return token;    //将token令牌返回}//获取签名的方法public static Algorithm getSignature(){return Algorithm.HMAC256(sign);}//token的校验public static DecodedJWT require(String token){return JWT.require(getSignature()).build().verify(token);}//获取token中的数据public static Claim getPayload(String token,String key){return require(token).getClaim(key);}
}

3.JWT所需的依赖

	<dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.4.0</version></dependency>

4.JWT登录生成Token的原理

当用户在登录表单输入信息后,服务端验证用户名密码正确,服务端会签发一个JWT(Token)。

JWT分为三个部分,它们之间通过.连接,第一部分是头,第二部分是负载,它们都是通过Base64编码生成字符串然后通过.连接

签发token就是通过Base64编码将标头与载荷(用户揉入的数据)生成字符串再通过签名算法与密钥生成一个签名,将这三部分通过.连接起来就是JWT令牌了

三、JWT的自校验

1.什么是JWT的自校验?

JWT的自校验其实就是因为,Base64是一种编码方式,而不是加密方式,所以通过Base64编码的数据,也可以通过Base64进行解码,因为头和载荷都是通过Base64编码的所以可以解码出来,所以客户端传入一个token,通过.分割出头和负载,然后解码,在通过这个头、负载以及签名算法和只有服务端知道的密钥生成一个签名,将这个签名与传入的token的签名做一个比对,这样就可以校验这个签名是否被篡改过,因为一旦传过来的token被篡改过,那么根据头、负载、签名算法、密钥生成的签名,就会与传过来的签名不一致,这样就保障了数据的安全性

例如:头是A    负载是B   签名算法和密钥在服务端是一样的    得到的签名是C

            所以Token是   A.B.C

一旦对这个Token进行篡改 如 A.B.D                            这个token传过去的头是A 负载是B  生成的签名是 C   发现根据传过来的头和负载生成的签名C与传过来的签名D不一致,所以则判断Token有问题

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

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

相关文章

浅谈智能制造

智能制造 如今&#xff0c;同一版本同一型号的手机&#xff0c;几乎是一模一样的。当我们说去选购商品&#xff0c;其实是在有限的型号中选择我们需要的那一款。可是&#xff0c;人的需求千变万化&#xff0c;为什么偏偏要归结到几个固定的型号上去呢&#xff1f;每个人不应该…

图片放大镜效果

安装&#xff1a; vueuse 插件 npm i vueuse/core 搜索&#xff1a; useMouseInElement 方法 <template><div ref"target"><h1>Hello world</h1></div> </template><script> import { ref } from vue import { useM…

【Python 算法】信号处理通过陷波滤波器准确去除工频干扰

对于一个信号来说通常汇入工频噪声往往是因为交流电产生的电泳&#xff0c;影响了我们信号采集导致信号上存在工频干扰。 那么matlab去除工频干扰可以通过陷波滤波器实现。 通常使用scipy.signal实现信号的处理。 Scipy的信号处理模块&#xff08;scipy.signal&#xff09;来创…

day02:DML DQL DCL

目录 一:DML 二:DCL 三:DCL 一:DML 1:概念:数据操作原因&#xff0c;对数据进行增删改。 2:三个操作 (1):增加:insert id name age gender 1 令狐冲 23 男 2(添加的数据)风清扬25男 1--->给指定字段添加数据:insert into 表名(字段1&#xff0c;字段2--)values…

攻防世界-web-FlatScience

1. 题目描述 打开链接&#xff0c;看到如下界面 界面上的链接都点击下&#xff0c;发现都是一些英文论文 这些暂时是我们从界面上能发现的全部信息了 2. 思路分析 && 解题过程 2.1 先将网站使用nikto命令扫描一下 我们发现除了显式的界面外&#xff0c;还有两个隐藏…

Mysql数据库 4.SQL语言 DQL数据操纵语言 查询

DQL数据查询语言 从数据表中提取满足特定条件的记录 1.单表查询 2.多表查询 查询基础语法 select 关键字后指定要查询到的记录的哪些列 语法&#xff1a;select 列名&#xff08;字段名&#xff09;/某几列/全部列 from 表名 [具体条件]&#xff1b; select colnumName…

华为昇腾NPU卡 大模型LLM ChatGLM2模型推理使用

参考&#xff1a;https://gitee.com/mindspore/mindformers/blob/dev/docs/model_cards/glm2.md#chatglm2-6b 1、安装环境&#xff1a; 昇腾NPU卡对应英伟达GPU卡&#xff0c;CANN对应CUDA底层&#xff1b; mindspore对应pytorch&#xff1b;mindformers对应transformers 本…

Vue-dvadmin-d2-crud-plus-自定义后台菜单-添加页面

文章目录 1.新建数据模型2.新建数据序列类3.新建数据视图4.配置路由5.前端新建View组件6.配置后台7.总结 django-vue-admin是一套全部开源的快速开发平台&#xff0c;毫无保留给个人及企业免费使用。 &#x1f9d1;‍&#x1f91d;‍&#x1f9d1;前端采用D2Admin 、Vue、Eleme…

Linux网络流量监控iftop

在 Linux 系统下即时监控服务器的网络带宽使用情况&#xff0c;有很多工具&#xff0c;比如 iptraf、nethogs 等等&#xff0c;但是推荐使用小巧但功能很强大的 iftop 工具【官网&#xff1a;http://www.ex-parrot.com/~pdw/iftop/】。iftop 是 Linux 系统一个免费的网卡实时流…

Path Gain and Channel Capacity for HAP-to-HAP Communications

文章目录 摘要实验仿真场景一&#xff1a; 距离变化对同海拔高度HAP的影响场景二&#xff1a;距离变化对不同海拔高度HAP通信的影响。场景三&#xff1a;平台高度和频率对HAP通信的影响四 信道容量 摘要 在这项研究中&#xff0c;我们重点分析了HAP之间的信道模型&#xff0c;…

HeidiSQL数据库管理工具使用教程

HeidiSQL数据库管理工具使用教程 功能介绍1. 下载使用2. 连接mysql3. SQL编辑器4. 数据导入和导出5. 批量操作6. 备份和恢复 功能介绍 HeidiSQL&#xff08;HeidiSQL数据库管理工具&#xff09;是一个开源的数据库管理工具&#xff0c;通常用于连接和管理关系型数据库系统。它…

边缘计算:云计算的延伸

云计算已经存在多年&#xff0c;并已被证明对大大小小的企业都有好处&#xff1b;然而&#xff0c;直到最近边缘计算才变得如此重要。它是指发生在网络边缘的一种数据处理&#xff0c;更接近数据的来源地。 这将有助于提高效率并减少延迟以及设备和云之间的数据传输成本。边缘…

EtherNet Ip工业RFID读写器与欧姆龙PLC 配置示例说明

一、准备阶段 POE交换机欧姆龙PLC 支持EtherNet Ip协议CX-Programmer 9.5配置软件 二、配置读卡器 1、打开软件 2、选择网卡&#xff0c;如果多网卡的电脑请注意对应所接的网卡&#xff0c;网卡名一般为“Network adapter Realtek PCIe GBE Family” 3、点击“选择网卡”&…

douyin ios 六神参数学习记录

玩那么久安卓了&#xff0c;也终于换一换ios终端分析分析&#xff0c;还是熟悉的x-gorgon&#xff0c;x-argus&#xff0c;x-medusa那些参数。 随便抓个抖音 ios版本的接口&#xff1a; 像评论接口&#xff1a; https://api26-normal-hl.amemv.com/aweme/v2/comment/list/?…

机器学习之查准率、查全率与F1

文章目录 查准率&#xff08;Precision&#xff09;&#xff1a;查全率&#xff08;Recall&#xff09;&#xff1a;F1分数&#xff08;F1 Score&#xff09;&#xff1a;实例P-R曲线F1度量python实现 查准率&#xff08;Precision&#xff09;&#xff1a; 定义&#xff1a; …

低概率Bug,研发敷衍说复现不到

测试工作中&#xff0c;经常会遇到一些低概率出现的问题&#xff0c;如果再是个严重问题&#xff0c;那测试人员的压力无疑是很大的&#xff0c;一方面是因为低概率难以复现&#xff0c;另一面则是来自项目组的压力。 如何在测试时减少此类问题的重复投入&#xff0c;我的思考如…

自研框架跻身全球 JS 框架榜单,排名紧随 React、Angular 之后!

前言 终于实现了一个重要目标&#xff01;我独立研发的 JavaScript 框架 Strve&#xff0c;最近发布了重大版本 6.0.2。距离上次大版本发布已经接近两个月&#xff0c;期间进行了大量的优化&#xff0c;使得框架性能和稳定性都得到了大幅度的提升。在上次的大版本更新中&#…

css 两栏布局的实现

目录 前言 1. 浮动布局 用法 代码示例 理解 2. Flex布局 用法 代码示例 理解 3. Grid布局 用法 代码示例 理解 高质量的设计 前言 两栏布局是一种常见的网页设计模式&#xff0c;它将页面分为两个主要区域&#xff1a;主内容区域和侧边栏。这种布局方式不仅能够提…

在docker环境下从头搭建openvslam/orb_slam3的流程记录以及问题总结

文章目录 0. 前言1. MobaXterm软件2. docker操作2.1. 拉一个ubuntu镜像2.2. 修改名字&#xff08;可选&#xff09;2.3. 删除之前的docker镜像&#xff08;可选&#xff09; 3. openvslam搭建流程3.1. 起容器3.2. 前置包的安装3.3. 安装Eigen3.4. 安装opencv3.5. 安装DBoW23.6.…

MySQL——九、SQL编程

MySQL 一、触发器1、触发器简介2、创建触发器3、一些常见示例 二、存储过程1、什么是存储过程或者函数2、优点3、存储过程创建与调用 三、存储函数1、存储函数创建和调用2、修改存储函数3、删除存储函数 四、游标1、声明游标2、打开游标3、使用游标4、关闭游标游标案例 一、触发…