2024 token的实现原理:JWT标准,一文搞懂

先看看,用户和服务器的交互 -- 面上是这样子的:

token的样子:

    你看上图,三个部分组成,每个部分中,由 " . ",逗号分割;

token为什么张这个样子?

    因为规定了,token由三个部分组成(就像:如果你是马斯克,你可以给自己的产品命名:特斯拉 ,一样的道理)

所以我们有必要了解,这一串中,3各部分是干什么的?内容是什么?

  JWT包含三个部分: Header头部,Payload负载和Signature签名。由三部分生成Token,三部分之间用“.”号做分割。

我先上一张图,结合图下面的解释,会理解清除:

Header头部 -- A区域:

                         

        这个区域是一个字符串,主要是告诉你:我是通过HS535进行加密.  (哈希加密)

Payload负载 -- B区域:

                ​​​​​​​        

        这个区域也是字符串,保存用户的信息,比如:用户id、token创建时间、token超时时间

        但是,不会包含敏感信息,比如:密码​​​​​​​

Signature签名 -- C区域:

        这个区域,就简单了,哈:

        ​​​​​​​        ​​​​​​​        目前的话凑合看吧

                C=(A+B)*HS535加密+加盐(加盐只有服务器知道盐的内容))*base64rul加案, 

         上面这段看不懂就看下面这句话(其实相对男一丢丢):

                C区域其实就是:A 和 B区域链接到一起,进行加密之后的结果(可以理解成字符串)

2024年2月7日16:38:25,快放年假了,先写到这,下面写加密过程:
用户登录之后,服务器端就生成了token:
这是token的生成原理:
A=加密方式->转化为字符串->base64ur加密(符号:+转化"exp" :'timesta
B=用户信息(记录用户的id和创建/超时时间)->字符串->base64ur加密
C=(A+B)*HS535加密+加盐(加盐只有服务器知道盐的内容))*base64rul加案

注意:(A+B)均是base64url加密后的数据

 服务器将生成的token,通过响应给浏览器

浏览器再次请求服务器时,会带着token

服务器,解析token,认证通过,把请求结果返回给用户端

服务器拿到token后,解密过程:

  1. 获取token,对token进行切割
  2. 对第二段B,进行base64url进行解密,获取payload信息,检测token是否超时
  3. 操作AB:将A 、B段拼接(AB均是base64url加密后的状态),再次通过HS535加密,假如得到一个CC字符串
  4. 操作C :需要把C进行base64url解密,结合加密过程中,C进行了额外一次的base64url加密(A+B)*base64url
  5. 对比:请求的token- 第三部分C == CC?  如果相等,校验通过.  如果有人修改任意内容,对比均不通过(因为加盐部分,对方不知道)

上面这个解密过程,可以好好看看,如果不懂的话欢迎留言

注意:

        这种方法,如果想要破解token,或者伪造token,或者人为恶意延长token的时间,都验证不通过,除非能拿到"盐" 

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

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

相关文章

如何使用 Bard 中的画图功能

Bard 是 Google AI 推出的大型语言模型,它不仅可以生成文本、翻译语言,还可以根据您的描述生成图像。这篇文章将介绍如何使用 Bard 中的画图功能。 步骤 1:打开 Bard 首先,您需要打开 Bard。您可以访问 bard.google.com: https:…

jvm基础篇之垃圾回收[2](垃圾回收算法)

文章目录 版权声明垃圾回收算法核心思想垃圾回收算法的历史垃圾回收算法的评价标准垃圾分类算法分类标记清除算法核心思想标记清除算法优缺点 复制算法核心思想完整案例复制算法的优缺点 标记整理算法核心思想标记整理算法优缺点 分代垃圾回收算法arthas查看分代内存情况核心思…

【动态规划】【子序列除重】【C++算法】1987不同的好子序列数目

作者推荐 【动态规划】【状态压缩】【2次选择】【广度搜索】1494. 并行课程 II 本文涉及知识点 动态规划汇总 LeetCode1987:不同的好子序列数目 给你一个二进制字符串 binary 。 binary 的一个 子序列 如果是 非空 的且没有 前导 0 (除非数字是 “0” 本身&…

NodeJs使用selenium

在模拟登陆qq空间实现(3)这里有对 selenium的使用,使用的是C#。本文基于nodejs使用selenium。 const { AuditManager } require(aws-sdk); const {By, Builder, Capabilities} require(selenium-webdriver); function sleep(ms) {return new Promise(resolve >…

2.7:二叉树创建、先中后遍历、各个节点度的个数、深度

1.二叉树的创建、先中后遍历、各个节点度的个数、深度 程序代码&#xff1a; 1 #include<stdio.h>2 #include<string.h>3 #include<stdlib.h>4 typedef char datatype;5 typedef struct node6 {7 datatype data;8 struct node *lchild;9 struct…

2024PMP考试新考纲-近年PMP真题练一练和很详细解析(3)

今天华研荟继续为您分享和解析PMP真题&#xff0c;一方面让大家感受实际的PMP考试和出题形式&#xff0c;另一方面是通过较详细的解题思路和知识讲解帮助大家最后一个多月有效备考&#xff0c;一次性3A通过2024年PMP考试。 2024年PMP考试新考纲-近年真题随机练一练 (注&#x…

6.1810: Operating System Engineering 2023 <Lab9: mmap>

一、本节任务 二、Lab: mmap (hard) 2.1 mmap 介绍 mmap(2) 系统调用能将文件或者设备映射到内存中&#xff0c;返回映射区域的起始地址。 #include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset); int munmap(void …

1-3 mininet中使用python API直接拓扑定义以及启动方式对比

作为SDN网络中搭建拓扑非常重要的仿真平台&#xff0c;我们可以使用mininet默认的库内拓扑文件&#xff0c;也可以使用python语言进行自定义拓扑。使用python进行拓扑定义时&#xff0c;不同的定义方式将导致其启动的方式由所不同。 一、采用最原始的命令启动方式&#xff1a; …

Rust开发WASM,浏览器运行WASM

首先需要安装wasm-pack cargo install wasm-pack 使用cargo创建工程 cargo new --lib mywasm 编辑Cargo.toml文件&#xff0c;修改lib的类型为cdylib&#xff0c;并且添加依赖wasm-bindgen [package] name "mywasm" version "0.1.0" edition "…

css1文本属性

一.颜色&#xff08;color&#xff09;&#xff08;一般用16进制&#xff09; 二.对齐&#xff08;text-align) 三.装饰&#xff08;text-decoration&#xff09; 四.缩进&#xff08;text-indent&#xff09;&#xff08;一般用2em&#xff09;&#xff08;有单位&#xff09;…

计算机组成原理——计算机系统概述

文章目录 概要计算机硬件的基本组成早期冯诺依曼的结构介绍特点 现代计算机的结构介绍五大部件的归属 五大部件存储器&#xff1a;存储体 MAR、MDR运算器控制器 运行原理 计算机软件系统软件和应用软件三种级别的语言编译程序与解释程序的区别 软件硬件功能程序的等价性指令集体…

《Git 简易速速上手小册》第9章:Git 工作流程定制(2024 最新版)

文章目录 9.1 选择合适的工作流9.1.1 基础知识讲解9.1.2 重点案例&#xff1a;为中等规模的 Python 项目选择 Feature Branch 工作流9.1.3 拓展案例 1&#xff1a;适应 Gitflow 工作流的大型项目9.1.4 拓展案例 2&#xff1a;使用 Forking 工作流的开源 Python 项目 9.2 定制化…