JWT原理解析

一、概述

虽然现在很多的开发框架会支持JWT的使用,但是对JWT还是没有一个详细的了解,有很多疑惑:

  • JWT比之前的session或者token有什么好处?
  • JWT的构成元素是什么?
  • JWT从生成到使用的详细流程?

二、 JWT

2.1 JWT是什么?

JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。

2.2 在什么场景使用JWT?

  • 授权

    授权是我们使用JWT最常见的场景;用户登录后,后端服务根据JWT规则生成token给到前端,前端之后的请求都会携带这个token访问后端接口,后端对这些请求校验token,保障token的有效性,进而确保是合法请求;JWT非常契合单点登录,因为JWT的后端认证不需要额外访问存储信息,只需要一个秘钥就可以自认证;

  • 交换信息

    由于JWT生成的token可以包含业务信息,而且这些业务信息是参与了签名的,所以保障了这些业务信息不被篡改,而且还有有效时间范围;

2.3 JWT生成规则

在这里插入图片描述
JWT整体的组成形式类似为: xxxx.yyyy.zzzz

JWT 本质上就是一组字串,通过(.)切分成三个为 Base64 编码的部分:

  • Header : 描述 JWT 的元数据,定义了生成签名的算法以及 Token 的类型;
    示例:

    {"typ":"JWT","alg":"HS256"}
    
  • Payload : 用来存放实际需要传递的数据;
    示例:

    {"sub":"123456","exp":1713939930564,"userid":"28912"}
    

    注意:由于Payload是明文传输和前端存储,所以不能存放隐私性信息

  • Signature(签名):服务器通过 Payload、Header 和一个密钥(Secret)使用 Header 里面指定的签名算法(默认是 HMAC SHA256)生成。
    示例:

    HMACSHA256(base64UrlEncode({"typ":"JWT","alg":"HS256"}) + "." +base64UrlEncode({"sub":"123456","exp":1713939930564,"userid":"28912"}),"123456789qwer")
    

最终得出的token示例:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
eyJzdWIiOiIxMjM0NTYiLCJleHAiOjE3MTM5Mzg4NTkzNDIsInVzZXJpZCI6IjI4OTEyIn0.
qFxI_m6XOYMdASi9nXpaOtr3p2SQCy8OOIktWhJBnCQ

至于其中的算法,可以按照JWT的严格算法来实现,也可以按照自己的算法来实现,只需要保证生成token验证token时的算法一致即可;

2.4 JWT、session、redis存储的token对比

JWTredis存储的token本地session
服务端是否需要存储用户认证成功的信息不需要需要需要
认证成功的用户信息存储在哪客户端redis本地
生成的token是否可以跨域使用可以可以不可以

上述表格对比了JWT redis存储的token 本地session 三者的一些特性;

  • JWT由于包含了认证的用户信息,那么就不需要后端服务再额外保存这些认证信息,所以节省了后端的资源;

  • JWT由于自包含认证信息,所以可以不依赖后端服务,可以在不同的后端服务之间认证使用;所以非常契合单点登录的实现;

  • JWT默认使用请求头Authorization向后端传输,当然你也可以使用其他请求头,只需要前后端一致即可;

    Authorization: Bearer {JWTtoken}

  • JWT由于摆脱了传统的cookie传输,所以跨资源(CORS)不会成为问题,有助于防止CSRF攻击;

2.5 JWT认证流程

在这里插入图片描述

上图是JWT在单点登录的认证流程过程;

如果后端是微服务架构,那么 验证JWT是否合法 这个功能可以集成到API网关层,统一处理即可;

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

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

相关文章

字节5面挂,恶心到了。。。

字节五面 今天脉脉看到一篇帖子: 楼主是 tx 的前员工,在字节五面(加轮)被挂后,认定(或许私下做了一些调查)是字节 HR 向 tx 背调,然后被前同事捏造虚假信息,导致的面试失…

网页基本标签

标题标签 <h1>一级标题</h1> <h2>二级标签</h2> <h3>三级标签</h3> <h4>四级标签</h4> <h5>五级标签</h5> <h6>六级标签</h6>标题标签一共有六级&#xff0c;大小从一级开始逐级往下递减&#x…

【数据结构】三、栈和队列:2.顺序栈共享栈(顺序栈的初始化,判空,进栈,出栈,读取栈顶,顺序栈实例)

文章目录 1.顺序栈1.1初始化1.2判空1.3进栈1.4出栈1.5读取栈顶1.6销毁栈❗1.7顺序栈c实例 2.共享栈2.1初始化2.2判满 1.顺序栈 用顺序存储实现的栈 顺序栈的缺点&#xff1a;栈的大小不可变。 #define MaxSize 10 //定义栈中元素的最大个数 typedef struct{ElemType data[…

nodejs写接口(一)

一、新手上路十大步 &#xff08;1&#xff09;先建一个常用的文件夹 &#xff08;2&#xff09;使用code打开 &#xff08;3&#xff09;在里面新建一个index.js文件 &#xff08;4&#xff09;新建项目 npm init -y //用于自己搭建一个项目框架&#xff08;写框架&#xf…

代码审计之SAST自动化

前言: 很久没写文章了&#xff0c;有点忙&#xff0c;落个笔&#xff0c;分享一些捣鼓或说适配好的一些好玩的东西。 脚本工具不开源&#xff0c;给一些思路&#xff0c;希望能给大家带来一些收获。 笔者能力有限&#xff0c;如有错误&#xff0c;欢迎斧正。 正文&#xff1a…

《软件设计师教程:计算机网络浅了解计算机之间相互运运作的模式》

​ 个人主页&#xff1a;李仙桎 &#x1f525; 个人专栏: 《软件设计师》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ​ ⛺️前言&#xff1a;各位铁汁们好啊&#xff01;&#xff01;&#xff01;&#xff0c;今天开始继续学习中级软件设计师考试相关的内容&#xff0…

3节点ubuntu24.04服务器docker-compose方式部署高可用elk+kafka日志系统并接入nginx日志

一&#xff1a;系统版本: 二&#xff1a;部署环境&#xff1a; 节点名称 IP 部署组件及版本 配置文件路径 机器CPU 机器内存 机器存储 Log-001 10.10.100.1 zookeeper:3.4.13 kafka:2.8.1 elasticsearch:7.7.0 logstash:7.7.0 kibana:7.7.0 zookeeper:/data/zookeep…

数字电子:二进制逻辑和信号

目录 模拟值 数字值 真和假 下拉电阻和上拉电阻 模拟值 模拟值是随时间连续变化的量。它可以取无限多的值——例如&#xff0c;温度、电池电压或扬声器中的音频信号。图1显示了模拟值的时间过程。模拟的概念可以通过连续性条件来表示。在实践中&#xff0c;数值沿着一个以…

代码随想录算法训练营DAY32|C++贪心算法Part.2|122.买卖股票的最佳时机II、55.跳跃游戏、45.跳跃游戏II

文章目录 122.买卖股票的最佳时机II思路CPP代码 55.跳跃游戏思路CPP代码 45.跳跃游戏II思路方法一代码改善 CPP代码 122.买卖股票的最佳时机II 力扣题目链接 文章讲解&#xff1a;122.买卖股票的最佳时机II 视频讲解&#xff1a; 状态&#xff1a;本题可以用动态规划&#xff0…

企业智能名片小程序:AI智能跟进功能助力精准营销新篇章

在数字化浪潮的推动下&#xff0c;企业营销手段不断迭代升级。如今&#xff0c;一款集手机号授权自动获取、智能提醒、访客AI智能跟进及客户画像与行为记录于一体的企业智能名片小程序&#xff0c;正以其强大的AI智能跟进功能&#xff0c;助力企业开启精准营销的新篇章。 通过深…

小程序 rich-text 解析富文本 图片过大时如何自适应?

在微信小程序中&#xff0c;用rich-text 解析后端返回的数据&#xff0c;当图片尺寸太大时&#xff0c;会溢出屏幕&#xff0c;导致横向出现滚动 查看富文本代码 图片是用 <img 标签&#xff0c;所以写个正则匹配一下图片标签&#xff0c;手动加上样式即可 // content 为后…

​HTTP与HTTPS:网络通信的安全卫士

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…

C语言.自定义类型:结构体

自定义类型&#xff1a;结构体 1.结构体类型的声明1.1结构体回顾1.1.1结构体的声明1.1.2结构体变量的创建和初始化 1.2结构体的特殊声明1.3结构体的自引用 2.结构体内存对齐2.1对齐规则2.2为什么存在内存对齐2.3修改默认对齐数 3.结构体传参4.结构体实现位段4.1什么是位段4.2位…

配置jupyter的启动路径

jupyter的安装参考&#xff1a;python环境安装jupyter-CSDN博客 1&#xff0c;背景 继上一篇python环境安装jupyter&#xff0c;里面有一个问题&#xff0c;就是启动jupyter&#xff08;命令jupyter notebook&#xff09;之后&#xff0c;页面默认显示的是启动时候的路径。 …

实验15 MVC

二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握MVC的用法。 三、源代码以及执行结果截图&#xff1a; inputMenu.jsp&#xff1a; <% page contentType"text/html" %> <% page pageEncoding "utf-8" %> &…

WSL2无法ping通本地主机ip的解决办法

刚装完WSL2的Ubuntu子系统时&#xff0c;可能无法ping通本地主机的ip&#xff1a; WSL2系统ip&#xff1a; 本地主机ip&#xff1a; 在powershell里输入如下的命令&#xff1a; New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias &quo…

linux 搭建知识库文档系统 mm-wiki

目录 一、前言 二、常用的知识库文档工具 2.1 PingCode 2.2 语雀 2.3 Tettra 2.4 Zoho Wiki 2.5 Helpjuice 2.6 SlimWiki 2.7 Document360 2.8 MM-Wiki 2.9 其他工具补充 三、MM-Wiki 介绍 3.1 什么是MM-Wiki 3.2 MM-Wiki 特点 四、搭建MM-Wiki前置准备 4.1 前置…

华为配置mDNS网关示例(AP与AC间二层转发)

华为配置mDNS网关示例&#xff08;AP与AC间二层转发&#xff09; 组网图形 图1 配置mDNS网关组网图 组网需求配置思路操作步骤配置文件 组网需求 如图1所示&#xff0c;某企业的移动终端通过WLAN连接网络&#xff0c;AP_1和AP_2分别与AC之间采用二层转发。部门1和部门2分别属…

利用大型语言模型提升个性化推荐的异构知识融合方法

在推荐系统中&#xff0c;分析和挖掘用户行为是至关重要的&#xff0c;尤其是在美团外卖这样的平台上&#xff0c;用户行为表现出多样性&#xff0c;包括不同的行为主体&#xff08;如商家和产品&#xff09;、内容&#xff08;如曝光、点击和订单&#xff09;和场景&#xff0…

场景文本检测识别学习 day06(Vi-Transformer论文精读)

Vi-Transformer论文精读 在NLP领域&#xff0c;基于注意力的Transformer模型使用的非常广泛&#xff0c;但是在计算机视觉领域&#xff0c;注意力更多是和CNN一起使用&#xff0c;或者是单纯将CNN的卷积替换成注意力&#xff0c;但是整体的CNN 架构没有发生改变VIT说明&#x…