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

news2024/11/14 2:39:18

目录

一、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对象构建Token
        String 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.coloradmin.cn/o/1134623.html

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

相关文章

Linux中关于glibc包导致的服务器死机或者linux命令无法使用的情况

glibc是gnu发布的libc库&#xff0c;即c运行库。glibc是linux系统中最底层的api&#xff0c;几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外&#xff0c;它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX …

智能巡检系统可以应用在哪些地方?巡检系统有什么优势?

智能巡检系统可以广泛应用于学校、物业、工厂、酒店和民宿、运维商以及能源行业等不同领域的巡检管理之中&#xff0c;为用户提供了巡检任务安排管理、签到打卡、工单上报处理以及数据统计分析等多种功能。 一、巡检系统的应用场景   1、学校&#xff1a;为了确保学校各项设施…

【抓包分析】通过ChatGPT解密还原某软件登录算法实现绕过手机验证码登录

文章目录 &#x1f34b;前言实现效果广告抓包分析一、定位加密文件二、编辑JS启用本地替换 利用Chatgpt进行代码转换最后 &#x1f34b;前言 由于C站版权太多&#xff0c;所有的爬虫相关均为记录&#xff0c;不做深入&#xff01; 今天发现github上没有这个东西&#xff0c;抓…

Centos7 防火墙的关闭

Centos7 防火墙的关闭 Centos7默认使用的是firewall作为防火墙&#xff1b; 查看防火墙状态&#xff1a;firewall-cmd --state 停止防火墙&#xff1a;systemctl stop firewalld.service; 禁止防火墙开机启动&#xff1a;systemctl disable firewalld.service; 放行端口…

项目总结-新增商品-Pagehelper插件分页查询

&#xff08;1&#xff09;新增商品 工具类&#xff1a; /** * Title: FileUtils.java * Package com.qfedu.common.utils * Description: TODO(用一句话描述该文件做什么) * author Feri * date 2018年5月29日 * version V1.0 */ package com.gdsdxy.common.u…

webpack 解决:TypeError: merge is not a function 的问题

1、问题描述&#xff1a; 其一、存在的问题为&#xff1a; TypeError: merge is not a function 中文为&#xff1a; 类型错误&#xff1a;merge 不是函数 其二、问题描述为&#xff1a; 想执行 npm run dev 命令&#xff0c;运行起项目时&#xff0c;控制台报错 TypeErro…

066:mapboxGL的marker的drag,dragstart,dragend三种触发事件示例

第066个 点击查看专栏目录 本示例是演示如何在vue+mapbox中处理marker的三种触发事件drag,dragstart,dragend。 marker通过on(‘XXX’, callback),的方式进行触发处理。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(…

医学YOLOv8 | 脑肿瘤检测 Accuracy 99%

在医疗保健领域&#xff0c;准确和高效地识别脑肿瘤是一个重大挑战。本文中&#xff0c;我们将探讨一种使用 YOLOv8&#xff0c;一种先进的目标检测模型&#xff0c;将脑肿瘤进行分类的新方法&#xff0c;其准确率达到了 99%。通过将深度学习与医学图像相结合&#xff0c;我们希…

Python算法例1 完美平方

例1 完美平方 1. 问题描述 给定一个正整数n&#xff0c;找到若干个完全平方数&#xff08;例如&#xff1a;1&#xff0c;4&#xff0c;9&#xff0c;…&#xff09;&#xff0c;使得它们的和等于n&#xff0c;完全平方数的个数最少。 2.问题示例 给出n8&#xff0c;返回2&…

【51单片机】:智能施工电梯系统

项目效果&#xff1a; 基于51单片机的智能施工电梯系统 摘 要 智能施工电梯系统目前广泛应用于人们建筑工程中&#xff0c;为人们施工时上下搬运提供了极大的便利。智能施工电梯系统包括密码开启、超重提示&#xff0c;电梯运作及相关信息显示等等功能&#xff0c;施工电梯为我…

数组中出现次数超过一半的数字整型数组有一个数字出现的次数超过总数的一半,请找出该数字

例如长度为 9 的数组{1,2,3,2,4,2,5,2,2}。 由于 2 出现的次数是 5 次,超过一半,所以结果为2。 算法一&#xff1a; 先排序,然后中间值就是要找的数字 图解&#xff1a; int Cmp_int(const void* vp1, const void* vp2) //定义排序规则 {return * (int*)vp1 - *(int*)vp2; } …

ts | js | 爬虫小公举分享

Curl转Code 快速将curl转为各种语言的代码; 便于提取请求头之类, 或者微改直接使用 https://curlconverter.com/node-axios/ (有点慢, 但是很全)https://www.lddgo.net/convert/curl-to-code (没有axios, 我喜欢用axios) 使用… 抓取地址, 使用浏览器或者其他抓包工具都可, 这…

IP地址在互联网中有哪些作用?

在互联网中&#xff0c;IP地址是一种用于唯一标识网络中设备的地址。IP地址不会与其他网络地址&#xff08;如MAC地址、URL、域名等&#xff09;发生冲突&#xff0c;因为它们各自在不同的网络层次上起作用&#xff0c;用于不同的目的。 IP地址&#xff08;Internet Protocol A…

vue3中常用的新组件

一、Fragment vue2中&#xff0c;组件必须有一个根标签 vue3中&#xff0c;组件可以没有根标签&#xff0c;内部会将多个标签包含在一个Fragment虚拟元素中。 优点&#xff1a;减少标签层级。 二、Teleport&#xff08;传送门&#xff09; 作用&#xff1a;将组件的 html …

企事业单位/公司电脑文件透明加密保护 | 防泄密软件\系统!

推荐——「天锐绿盾电脑文件防泄密系统」 一款全面的企业/公司数据透明加密防泄密系统&#xff0c;旨在从源头上保障数据的安全和使用安全。 PC访问地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 它具有以下特点&#xff1a…

小程序 swiper滑动 层叠滑动效果

整个红色区域为可滑动区域&#xff0c;数字1区域为展示区域&#xff0c;数字2为下一个展示模块 <scroll-view class"h_scroll_horizontal" enhanced"ture" bind:touchend"touchEnd" bind:touchstart"touchStart"><view clas…

vs c++ 代码 c2362错误

c 开发调试bug 报错 c2362错误 goto语句的使用错误。 我的使用是这样的&#xff1a; goto __end; int nLen value; gto _end; int pBuffer value2;end:我的 nlen 和 pBuffer 直接初始化了&#xff0c;而 goto 与标签之间有任何初始化的语句都不可以&#xff0c;除非用括号把…

CTF-Crypto-第一天-常见编码and古典密码(入门学习笔记)(详)

文章目录 前言0x1 常见编码0x01 编码0x02 ASCII码0x03 Base系列编码0x04其他编码- URL编码-莫尔斯电码&#xff08;Morse Code&#xff09;-HTML实体编码-其他中的其他... 0x05编码与加密的关系 古典密码凯撒密码简单替换密码维吉尼亚密码栅栏密码其他古典密码替换加密移位加密…

c语言从入门到实战——分支和循环

分支和循环 前言1. if语句1.1 if1.2 else1.3 分支中包含多条语句1.4 嵌套if1.5 悬空else问题 2. 关系操作符3. 条件操作符4. 逻辑操作符&#xff1a;&& , || , &#xff01;4.1 逻辑取反运算符4.2 与运算符4.3 或运算符4.4 练习&#xff1a;闰年的判断4.5 短路 5. swit…

net::ERR_BLOCKED_BY_ADMINISTRATOR 问题定位与解决

本文基于谷歌浏览器调试手机应用 chrome://inspect/#devices 我有一个非常简单的广告页面&#xff0c;页面中有一张背景图&#xff0c;和一个按钮 他本应该是这样的 但实际上只显示了最下方的按钮&#xff0c;整个图片是空白的 页面仅在小米浏览器不显示背景图片&#xff0c;…