一篇了解什么是Token、什么是Jwt

news2024/9/24 17:17:19

目录

  • Token
    • 什么是Token
    • Token实现认证流程
    • 优缺点
  • JWT
    • 什么是JWT
    • JWT组成
    • JWT加密流程
    • 优缺点
  • Token与JWT的区别
  • 常见的加密算法

Token

什么是Token

Token:

  • Token是访问资源接口(API)时所需要的资源凭证,也成为令牌

传统的Token

  • 传统的Token,例如:用户登录成功生成对应的令牌,key:令牌 ,value:userId(用户信息)
  • 将该token存放到Redis中,返回对应的Token返回给客户端。
  • 客户端每次访问后端请求的时候,会传递该token在请求中 (可以作为请求头传递,或者请求路径传递等),服务器端接收到该token之后,从redis中查询如果存在的情况下,则说明在有效期内,如果在Redis中不存在的情况下,则说明过期或者token错误。

Token实现认证流程

  1. 前端点击登陆,服务器验证账号密码是否正确
  2. 正确后,服务器生成令牌(生成令牌的技术有很多,比如UUID等)
  3. 将该令牌存到数据库或redis中,key是uuid(Token),value是userId
  4. 把令牌返给客户端,客户端把令牌存在cookie中。
  5. 以后请求的时候就把Token放在请求头里带上
  6. 服务端收到请求后,从redis中验证该Token是否存在
  7. 不存在,则说明用户未登录登录过期
  8. 存在获取value内容userId。根据userId查询数据库用户信息。
  9. 如果数据库中存在userId用户,则说明认证成功,可以访问资源。

优缺点

优点

  • 可以隐藏真实数据,适当避免明文传输
  • 适用于分布式,解决Session共享问题

缺点

  • 依赖Redis数据库存储
  • 如果不使用第三方存储,那还不如使用Session

JWT

什么是JWT

JWT:

  • JWT的全称是JSON WEB Token,是一种流行的跨域认证解决方案。
  • 它将用户信息加密到Token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证Token的正确性,只要正确即通过验证。

在这里插入图片描述

JWT组成

JWT分3部分 —— Header、Payload、Signature

(1)Header(头) 作用:记录令牌类型、签名算法等 例如:{“alg":“HS256”,“type”,"JWT}

(2)Payload(有效载荷) 作用:携带一些用户信息 例如{“userId”:“1”,“username”:“mayikt”}

(3)Signature(签名) 作用:防止Token被篡改、确保安全性 例如 计算出来的签名,一个字符串

Header(头)

{
Typ=“jwt” —类型为jwt
Alg:“HS256” —加密算法为hs256
}

Payload(有效载荷)

iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

Signature(签名)

这段是签证信息,非常非常关键的部分。
这关乎你的这个 Token 是否安全,是否能被人仿造。
一般是对 header (base64后的) 和 payload (base64后的) 这两部分的数据通过 secret(私钥)进行签名后的结果。
所以这个签名算法就非常关键了,常用的有 SHA256 和 HMAC,个人更推荐使用 RSA

JWT加密流程

加密流程:

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

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  1. Header 声明信息。 在Header中通常包含了两部分:type:代表token的类型,这里使用的是JWT类型。
    alg:使用的Hash算法,例如HMAC SHA256RSA。{ “alg”: “HS256”, “typ”: “JWT” } 这会被经过base64Url编码形成第一部分
  2. Payload Token的第二个部分是荷载信息,它包含一些声明Claim(实体的描述,通常是一个User信息,还包括一些其他的元数据)
    声明分三类:
    1 )Reserved Claims,这是一套预定义的声明,并不是必须的,这是一套易于使用、操作性强的声明。包括:iss(issuer)、exp(expiration time)、sub(subject)、aud(audience)等
    2)Plubic Claims,
    3)Private Claims,交换信息的双方自定义的声明 { “sub”: “1234567890”, “name”: “John Doe”,“admin”: true } 同样经过Base64Url编码后形成第二部分
  3. signature 使用Header中指定的算法将编码后的Header、编码后的Payload、一个secret进行加密。例如使用的是HMAC SHA256算法,大致流程类似于: HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload),secret) 这个signature字段被用来确认JWT信息的发送者是谁,并保证信息没有被修改 。

验证流程:

  • 在头部信息中声明加密算法和常量,然后把Header使用json转化为字符串
  • 在载荷中声明用户信息,同时还有一些其他的内容,再次使用json把在和部分进行转化,转化为字符串
  • 使用在header中声明的加密算法来进行加密,把第一部分字符串和第二部分的字符串结合和每个项目随机生成的secret字符串进行加密,生成新的字符串,此字符串是独一无二的
  • 解密的时候,只要客户端带着jwt来发起请求,服务端就直接使用secret进行解密,解签证解出第一部分第二部分,然后比对第二部分的信息和客户端穿过来的信息是否一致。如果一致验证成功,否则验证失败。

特点:

  • 三部分组成,每一部分都进行字符串的转化
  • 解密的时候没有使用数据库,仅仅使用的是secret进行解密
  • Jwt使用的secret千万不能丢失

优缺点

优点

  • 无需服务器端存放数据,减轻服务器端的压力
  • 占用带宽比较小、跨语言
  • token自身包含用户信息且无法篡改,在服务(网关)中可以自行解析校验出用户信息,对认证服务器(account-svc)压力小

缺点

  • 建议不要放敏感数据 userId手机号码(如果非要放userId,deptId等信息,可采用rsa256算法加密)rsa256生成JWT
  • JWT生成之后无法修改
  • 无法吊销令牌,只能等待令牌自身过期

Token与JWT的区别

  • Token需要查库验证Token 是否有效
  • JWT不用查库,直接在服务端进行校验。因为用户的信息及加密信息在第二部分Payload和第三部分签证中已经生成,只要在服务端进行校验就行,并且校验也是JWT自己实现的。

常见的加密算法

在这里插入图片描述

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

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

相关文章

MongoDB数据库本地部署并结合内网穿透实现navicat公网访问

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

框架面试题

文章目录 1. spring中的bean是线程安全的吗2. 事务的实现--AOP3. 项目中用到的AOP4.spring中事务的失效场景5. Bean的生命周期6.spring中的循环引用问题7. springMVC的执行流程8. springboot自动装配原理9. 常见注解10 Mybatis11 Mybatis一二级缓存 1. spring中的bean是线程安全…

Java Web Day07-08_Layui

1. Layui概念介绍 layui(谐音:类 UI) 是一套开源的 Web UI 解决方案,采用自身经典的模块化规范,并遵循原生 HTML/CSS/JS 的开发方式,极易上手,拿来即用。其风格简约轻盈,而组件优雅丰盈&#x…

平衡二叉树的构建(递归

目录 1.概念:2.特点:3.构建方法:4.代码:小结: 1.概念: 平衡二叉树(Balanced Binary Tree),也称为AVL树,是一种二叉树,它满足每个节点的左子树和右…

vivado 时序多条路径

移动设置 以下示例显示了移动设置的结果: •示例一:设置5/保持相应移动 •示例二:设置5/保持4 示例一:设置5/保持相应移动 让我们假设设置路径乘数设置为五(5)。因为保持路径乘数是未指定,…

vue3 全局配置Axios实例

目录 前言 配置Axios实例 页面使用 总结 前言 Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js 环境。它提供了一种简单、一致的 API 来处理HTTP请求,支持请求和响应的拦截、转换、取消请求等功能。关于它的作用: 发起 HTTP …

消费革命:钱币新生的秘密,解锁无尽财富!

你是否曾经觉得,每次掏腰包后的那笔钱就此消失,再无踪迹?现在,我们将引领你进入一个全新的消费时代——消费革命!它不仅满足你的物质需求,更将你的消费转化为财富的源泉,让你的每一分钱都活起来…

【网络安全/CTF】catcat-new

该题考察文件包含漏洞 正文 看到file参数,考虑文件读取 读取当前进程的命令行参数 ?file../../../../proc/self/cmdline读取app.py: bimport os\nimport uuid\nfrom flask import Flask, request, session, render_template, Markup\nfrom cat import …

Flutter详解及案例代码

概念 Flutter是由Google开发的开源UI框架,旨在快速构建高质量的移动应用程序。与传统的移动应用开发方式不同,Flutter使用单一代码库构建应用程序,可以同时在iOS和Android上运行。 Flutter的核心是使用Dart语言编写的,并且具有自…

亚马逊、虾皮、shein、Lazada等平台卖家如何冲刺圣诞大促,提升产品销量?

随着年底的临近,2023年的最后一个重要促销活动——圣诞大促已经冲刺阶段。 那现阶段对我们卖家来说,有哪些值得我们关注的点呢? 1.明确各级别产品的推广目的 根据产品表现,将产品分为主推款、平推款和清货款,然后针…

【adb】--- win10 配置 adb环境 超详细 (持续更新中)

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。 【adb】--- win10 配置 adb环境 超详细 &…

【技术分享】单网口远程透传网关快速实现昆仑通态触摸屏程序远程上下载及监控

准备工作 一台可联网操作的电脑一台单网口的远程透传网关及博达远程透传配置工具网线一条,用于实现网络连接和连接触摸屏一台昆仑通态触摸屏及其编程软件一张4G卡或WIFI天线实现通讯(使用4G联网则插入4G SIM卡,WIFI联网则将WIFI天线插入USB口&#xff0…

notepad++打开大文件失败问题

问题 :::warning 打开300多兆的日志文件提示文件太大打不开,但是其他版本的能打开 ::: 解决 换版本,没有好办法,换个版本就可以了

嵌入式科普(7)你知道JTAGSWD接口最少接几根线?

一、目的/概述 二、实际问题 2.1 原接线方式 2.2 解决方案 2.3 思考GND原因 三、资料来源 四、JTAG&SWD相关概念的逻辑 五、总结和提问 嵌入式科普(7)你知道JTAG&SWD接口最少接几根线? 一、目的/概述 1、那位同学直接抢答说2根线,数…

excel统计分析——K-S正态性检验

参考资料: 马兴华,张晋昕.数值变量正态性检验常用方法的对比[J].循证医学,2014,14(02):123-128 统计推断——正态性检验(图形方法、偏度和峰度、统计(拟合优度)检验)_sm.distributions.ecdf-CSDN博客 K-S检验法判断…

汽车之家获2023金网奖、艾奇奖:新商业时代如何打好内容营销牌

商业世界,营销是主线,是当之无愧的主角。从最原始的王婆卖瓜式的叫卖,到广告式的轰炸传播、跨界营销,再到润物细无声的内容营销。营销在悄然迭代,而当下,正值内容营销的最好时代。 因为内容无处不在。读者…

windows安全配置实验手册

访问控制策略(L1940520022J) 预备知识 Windows 7中,不仅有面向软件的限制方法,还增加了一种名为AppLocker的访问控制策略(仅适用于企业版和旗舰版)。 实验环境 操作系统类型:windows 7。 实…

优雅地使用python读取excel

python读取excel可以用pandas模块,功能比较强大 在对应的虚拟环境里面用anaconda安装(如果你的python运行环境是用anaconda配置的),如果没有添加虚拟环境,直接在终端里面pip3 install pandas安装就可以。 import pan…

测试C#使用AForge从摄像头获取图片

百度“C# 摄像头”关键词,从搜索结果来看,使用OpenCV、AForge、window动态链接库获取摄像头数据的居多,本文学习基于Aforge.net连接摄像头并从摄像头获取图片的基本方法。   AForge相关包(尤其是相关的控件)主要针对…

个人或企业为啥要搭建及自己的知识付费平台才有前景?

在知识经济的时代,知识的传播和变现显得愈发重要。许多个人或企业选择将自己的知识、技能和经验通过课程的形式进行传播,以实现知识的价值。然而,在使用其他平台进行课程销售的过程中,他们常常面临着一些问题和挑战。 首先&#…