2024年回炉计划之JWT(五)

一、简介        

        WT(JSON Web Token)是一种用于在网络应用间安全地传递信息的开放标准(RFC 7519)。它是一种紧凑且自包含的方式,用于在各方之间传输信息作为 JSON 对象。JWT 可以通过数字签名(使用 HMAC 算法)或使用公钥/私钥对(RSA 或 ECDSA)进行验证,以保证信息的完整性和可信度。

JWT 由三部分组成,它们分别是:

  1. Header(头部):包含了两部分信息,声明类型(typ)和所使用的签名算法(alg),通常为 JSON 对象。
  2. Payload(载荷):包含了需要传递的信息,也是一个 JSON 对象,其中包含了一些预定义的声明,比如过期时间(exp)、发行者(iss)、接收者(aud)等,也可以包含一些自定义的声明。
  3. Signature(签名):由前两部分的编码信息与一个秘密密钥结合后经过签名算法生成。

JWT 的工作流程通常如下:

  1. 认证:用户提供其凭据,服务器验证凭据的有效性。
  2. 生成 Token:一旦验证通过,服务器生成一个 JWT 并将其返回给客户端。
  3. 存储 Token:客户端通常会将 JWT 存储在本地,例如在浏览器的 localStorage 中或者移动端的本地存储中。
  4. 发送 Token:客户端在每次与服务器进行通信时,都会将 JWT 发送给服务器,通常是通过 HTTP 请求的头部部分发送(通常是 Authorization 头)。
  5. 验证 Token:服务器收到 JWT 后,会验证其签名和有效期,以确保其合法性和有效性。
  6. 处理请求:如果验证通过,服务器会处理请求,并相应客户端请求。

二、签名过程详解

        JWT 的 Signature 部分是用于验证 JWT 的完整性和真实性的关键组成部分。它通过对 Header 和 Payload 的内容使用指定的加密算法并结合密钥生成的签名,确保了 JWT 在传输过程中没有被篡改。

Signature 部分的生成流程如下:

  1. 构造待签名的字符串:将 Base64 编码后的 Header 和 Payload 拼接成一个字符串,形如 base64UrlEncode(header) + '.' + base64UrlEncode(payload)
  2. 使用指定的算法进行签名:使用 Header 中指定的算法(通常是 HMAC SHA-256 或 RSA)对上述构造的字符串进行签名。对于 HMAC 算法,需要使用共享的密钥来进行签名;对于 RSA 算法,需要使用私钥来进行签名。
  3. Base64 编码签名结果:将签名结果进行 Base64 编码,得到最终的 Signature。

验证 JWT 时,接收方会根据相同的算法和密钥对收到的 JWT 进行解析,然后按照相同的步骤重新计算 Signature,最后比对计算得到的 Signature 是否与 JWT 中的 Signature 一致。如果一致,则说明 JWT 没有被篡改过,可以信任其中的信息。

需要注意的是,JWT 的 Header 中包含了算法的信息,因此验证方需要根据 Header 中指定的算法来选择相应的方法进行签名验证。同时,为了保证安全性,应该尽量避免将敏感信息存储在 JWT 中,因为虽然 JWT 的内容经过了 Base64 编码,但仍然可以通过解码还原出原始数据。

三、示例

        构成:header.payload.Signature

        示例:eyJ0eXBlIjoiand0IiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiJqaWtlMjUwc3ViamVjdCIsInVzZXJOYW1lIjoiaGhiYmVpamluZ0AxNjMuY29tIiwiaWF0IjoxNzA4MjIzMzk4LCJleHAiOjE3MDY1MjA0MzF9.2-SSAT5Fvt1tsDHWhf9CwT8rS9KgzRn-dxuqFimGlw4

        解析:JSON Web Tokens - jwt.io

        至于生成JWT的token与校验代码,不再赘述。

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

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

相关文章

对树莓派上配置mdadm的一些补充

1、如果要重新配置该如何回退到初始状态? 答:可参考以下指令: cat /proc/mdstat sudo umount /dev/md0 sudo mdadm --stop /dev/md0 sudo mdadm --zero-superblock /dev/sda sudo mdadm --zero-superblock /dev/sdb sudo nano /etc/fstab&a…

UE4学习笔记 FPS游戏制作5 动画蒙太奇制作开枪动画

创建一个蒙太奇 选择角色的骨骼,并重命名 编辑蒙太奇 将我们需要的动画拖动到Default下的两个白杠的上边那个里 然后在下方的Sections节点中,点击Preview后的Default,选中后,再点击PreviewAllScetions上百年的长的绿色的Defalut&…

机器学习 | 实现图像加密解密与数字水印处理

目录 实现窗口可视化 数字图像加密 窗口布局设置 基于混沌Logistic的图像加密 基于三重DES的图像加密 数字图像解密 窗口布局设置 基于混沌Logistic的图像解密 基于三重DES的图像解密 基于LSB的数字水印提取 窗口布局设置 水印的嵌入与提取 实现窗口可视化 这里…

《数字图像处理-OpenCV/Python》连载:形态学图像处理

《数字图像处理-OpenCV/Python》连载:形态学图像处理 本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 第 12 章 形态学图像处理 形态学图像处理是基于形状的图像处理&…

HarmonyOS router页面跳转

默认启动页面index.ets import router from ohos.router import {BusinessError} from ohos.baseEntry Component struct Index {State message: string Hello World;build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//添加按钮&am…

普法GraphicBuffer诞生以及跨进程传递

GraphicBuffer诞生以及跨进程传递重认识 引言 对于Android的Graphics图形堆栈这块,自我感觉看了蛮多的博客啊文档(不管是比较老的还是新一点的)。但是仅仅只是看了而已,都是蜻蜓点水,没有进行记录也没有总结。所以每次哪怕阅读过程中产业了很…

了解代码签名证书

作用 确认开发者身份:通过代码签名证书,用户可以验证软件的开发者是否是可信的。这有助于建立用户对软件的信任,降低用户对于恶意软件的风险。保证软件完整性:代码签名证书还可以确保软件在传输和安装过程中未被篡改。用户在安装…

1.初识Tauri

文章目录 一、前言二、基本认识三、js与rust通信四、构建应用 一、前言 原文以及后续文章可点击查看:初识Tauri。 Tauri是一款比较新的跨平台桌面框架,也是我目前最喜欢的一个框架,其官网为:Tauri 它的作用其实和Electron很像&…

基于Java SSM框架实现电影售票系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现电影售票系统演示 SSM框架 当今流行的“SSM组合框架”是Spring SpringMVC MyBatis的缩写,受到很多的追捧,“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架,通常更简单的数据源。Spring属于…

差异分析和PPI网路图绘制教程

写在前面 在原文中,作者获得285个DEG,在此推文中共获得601个DEG。小杜的猜想是标准化的水段不同的原因吧,或是其他的原因。此外,惊奇的发现发表医学类的文章在附件中都不提供相关的信息文件,如DEG数据、GO、KEGG富集信…

主持人大赛活动策划方案

一、第一轮比赛: 内容:同题主持,以枣矿集团主持人比赛为题进行开场主持。主持词自拟,内容包括:活动目的、意义、活动的准备情况、选手产生情况、活动将要进行的主要环节、介绍评委、对活动的展望等,可以采用…

flutter 文件上传组件和大文件分片上传

文件分片上传 资料 https://www.cnblogs.com/caijinglong/p/11558389.html 使用分段上传来上传和复制对象 - Amazon Simple Storage Service 因为公司使用的是亚马逊的s3桶 下面是查阅资料获得的 亚马逊s3桶的文件上传分片 分段上分为三个步骤:开始上传、上传对…