JWT的实现及其适用场景

官方文档

一、什么是JWT

JWT(全称JSON Web Token)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于作为JSON对象在各方之间安全地传输信息。此信息是经过数字签名的,因此可以验证和信任。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。

虽然JWT可以加密,也可以在各方之间提供保密性,但我们将专注于签名代币。签名令牌可以验证其中包含的声明的完整性,而加密令牌则向其他方隐藏这些声明。当使用公钥/私钥对对令牌进行签名时,签名还证明只有持有私钥的一方才是签名方。

二、JWT的应用场景

1、授权认证:这是使用JWT最常见的场景。一旦用户登录,每个后续请求都将包括JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是目前广泛使用JWT的一个功能,因为它的开销很小,并且能够在不同的域中轻松使用。
2、信息交换:JSON Web令牌是在各方之间安全传输信息的好方法。因为JWT可以签名——例如,使用公钥/私钥对——所以你可以确保发送者就是他们所说的那个人。此外,由于签名是使用标头和有效载荷计算的,因此还可以验证内容是否未被篡改。

三、 JWT的构成

JSON Web由header、payload、Signature组成,由点(.)分隔。

1、Header

Header通常由两部分组成:令牌的类型(JWT)和所使用的签名算法(如HMAC SHA256或RSA)。
格式如下:

"Header":
		{
		  "alg": "HS256",
		  "typ": "JWT"
		}

2、Payload

Payload 包含的事声明的内容。声明是关于实体(通常是用户)和附加数据的声明。索赔有三种类型:注册声明、共有声明和私有声明。

"Payload":
		{
		  "sub": "1234567890",
		  "name": "John Doe",
		  "admin": true
		}

3、Signature

Signature由header、payload、secret加签后得到。

例如,如果要使用HMAC SHA256算法,则将以以下方式创建签名:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

4、加的验证

官方提供了一个调试地址,jwt.ioDebugger

在这里插入图片描述

四、JWT的工作原理

在身份验证中,当用户使用其凭据成功登录时,将返回一个JWT Token由于Token是凭据,因此必须非常小心地防止出现安全问题。一般来说,不应将令牌保存的时间超过所需的时间。

由于缺乏安全性,您也不应将敏感会话数据存储在浏览器存储(Local Storage)中。

每当用户想要访问受保护的路由或资源时,用户代理都应该发送JWT,通常在Authorization头中使用Bearer模式。header的内容应如下所示:

Authorization: Bearer <token>

在某些情况下,这可能是一种无状态授权机制。服务器的受保护路由将在Authorization标头中检查有效的JWT,如果存在,则允许用户访问受保护的资源。如果JWT包含必要的数据,则可以减少查询数据库以进行某些操作的需要,尽管情况并非总是如此。

请注意,如果您通过HTTP头发送JWT令牌,则应尽量防止它们变大。有些服务器不接受超过8 KB的标头。如果您试图在JWT令牌中嵌入太多信息,例如通过包括所有用户的权限,您可能需要一个替代解决方案,如 Auth0 Fine-Grained Authorization。

如果Token是在 Header的Authorization中发送的,则跨域资源共享(CORS)不会成为问题,因为它不使用cookie。

下图显示了如何获取JWT并将其用于访问API或资源:
在这里插入图片描述
请注意,对于已签名的Token,其包含的所有信息都会暴露给用户或其他方,即使他们无法更改这些信息。这意味着您不应将机密信息放入Token中。

五、为什么要使用JWT

让我们来谈谈JSON Web Token(JWT)与Simple Web Token(SWT)和Security Assertion Markup Language Tokens (SAML)相比的优势。

由于JSON没有XML那么冗长,所以当对其进行编码时,其大小也更小,这使得JWT比SAML更紧凑。这使得JWT成为在HTML和HTTP环境中传递的一个很好的选择。

在安全性方面,SWT只能使用HMAC算法通过共享密钥进行对称签名。但是,JWT和SAML Token可以使用X.509证书形式的公钥/私钥对进行签名。与签名JSON的简单性相比,在不引入模糊安全漏洞的情况下使用XML数字签名对XML进行签名是非常困难的。

JSON解析器在大多数编程语言中很常见,因为它们直接映射到对象。相反,XML没有自然的文档到对象映射。这使得使用JWT比使用SAML断言更容易。

关于使用情况,JWT是在互联网范围内使用的。这突出了在多个平台(尤其是移动平台)上客户端处理JSONWeb Token的方便性。

六、JWT的场景问题

JWT的问题主要表现在其数据一致性上,如用户基于某些因素失效了,但是Token依旧有效。

具体的优化,可以参考这篇文章.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分页多线程处理大批量数据

1.业务场景 因为需要从一个返利明细表中获取大量的数据&#xff0c;生成返利报告&#xff0c;耗时相对较久&#xff0c;作为后台任务执行。但是后台任务如果不用多线程处理&#xff0c;也会要很长时间才能处理完。 另外考虑到数据量大&#xff0c;不能一次查询所有数据在内存…

LaTeX论文汇报ppt模板

在 LaTeX 的 beamer 类中&#xff0c;您可以使用不同的主题和模板来创建适合论文汇报的演示文稿。以下是一个使用了比较正式的 Madrid 主题的模板&#xff0c;您可以基于这个模板进行定制和扩展&#xff0c;以满足您论文汇报的需求。当需要在ppt输入中文的时候需要将第一行中的…

北京中科富海低温科技有限公司确认出席2024第三届中国氢能国际峰会

会议背景 随着全球对清洁能源的迫切需求&#xff0c;氢能能源转型、工业应用、交通运输等方面具有广阔前景&#xff0c;氢能也成为应对气候变化的重要解决方案。根据德勤的报告显示&#xff0c;到2050年&#xff0c;绿色氢能将有1.4万亿美元市场。氢能产业的各环节的关键技术突…

大数据技术在工厂生产数字转型中的应用与价值

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 随着大数据技术的快速发展&#xff0c;越来越多的企业开始关注并应用大数据技术&#x…

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

目录 一、结构的特殊声明二、结构的自引用三、结构体内存对齐1.对齐规则2.为什么存在内存对齐(1)平台原因 (移植原因)&#xff1a;(2)性能原因&#xff1a; 3.修改默认对齐数 四、结构体传参五、结构体实现位段1.什么是位段2.位段的内存分配3.位段的跨平台问题4.位段使用的注意…

tftp使用

下载 sudo apt-get install tftpd-hpa 创建文件夹 mkdir /home/ljl/work/tftpd mkdir /home/ljl/tftpd chmod 777 tftpd/编辑 sudo vim /etc/default/tftpd-hpa //服务器端 sudo apt-get install tftp-hpa //客户端编辑权限 sudo vi /etc/default/tftpd-hpa 内容&#xff1…

jenkins构建完成后部署到本机,无法读取容器外文件夹

项目背景&#xff1a; Dockerjenkins 构建完成后&#xff0c;要把打包的dist文件夹内容移动到网站目录 /www/wwwroot/xxxxxx 文件夹下&#xff1b;但是获取不到jenkins容器外的文件夹。 解决办法&#xff1a; 在容器中&#xff0c;添加挂载/映射本机目录&#xff0c;把网站…

两直线交点算法 C

求两直线交点算法 有中间交点 则CD在AB异侧 A B A C A B A D \nobreak AB \times AC \newline AB \times AD ABACABAD 异号 叉乘后相乘小于零 等于零的几种情况 A B C与AB共线 D与AB共线 求交点&#xff0c;可由面积比例用叉乘计算 C E C D S A B C S A B C D . \frac…

yarn的使用与安装

文章目录 1.安装方式一&#xff1a;全局安装yarn2.安装方式二&#xff1a;通过开启corepack安装3.其他部分yarn命令4.Yarn镜像配置5.Pnpm使用方法同yarn无区别,可按照以上yarn的安装以及使用方式来使用pnmp 1.安装方式一&#xff1a;全局安装yarn 全局安装yarn npm i yarn -g…

视频记录历史播放位置效果

简介 每次打开页面视频从上一次的播放位置开始播放 利用lodash库做节流 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

自动驾驶---Motion Planning之轨迹Path优化

1 背景 在之前的几篇文章中,不管是通过构建SL图《自动驾驶---Motion Planning之Path Boundary》,ST图《自动驾驶---Motion Planning之Speed Boundary》,又或者是构建SLT图《自动驾驶---Motion Planning之构建SLT Driving Corridor》,最终我们都是为了得到boundary的信息。 …

牛客题霸-SQL进阶篇(刷题记录二)

本文基于前段时间学习总结的 MySQL 相关的查询语法&#xff0c;在牛客网找了相应的 MySQL 题目进行练习&#xff0c;以便加强对于 MySQL 查询语法的理解和应用。 由于涉及到的数据库表较多&#xff0c;因此本文不再展示&#xff0c;只提供 MySQL 代码与示例输出。 部分题目因…

【隐私计算实训营003详解隐私计算框架及技术要点】

1. 隐语架构一览 1.1 隐语架构 隐语架构通常指的是一种面向隐私保护计算的软件框架或解决方案&#xff0c;它采用了密码学、可信执行环境&#xff08;TEE&#xff09;、多方安全计算&#xff08;MPC&#xff09;等多种隐私保护技术来实现在数据加密状态下进行计算&#xff0c;…

【计算机网络篇】数据链路层(2)封装成帧和透明传输

文章目录 &#x1f95a;封装成帧和透明传输&#x1f388;封装成帧&#x1f388;透明传输&#x1f5d2;️面向字节的物理链路使用字节填充的方法实现透明传输。&#x1f5d2;️面向比特的物理链路使用比特填充的方法实现透明传输。 &#x1f6f8;练习 &#x1f95a;封装成帧和透…

河北盟盾:高性能钢结构防火涂料,安全守护新力量

在现代化建设的浪潮中&#xff0c;防火安全日益成为各行业关注的焦点。河北盟盾防火材料有限公司以其卓越的产品质量和稳定性能&#xff0c;赢得了市场的广泛认可。公司始终坚持以科技为先导&#xff0c;以创新为动力&#xff0c;不断推出高品质、高性能的防火涂料产品。 公司的…

通讯录的动态实现

文章目录 通讯录的动态实现模块化编程通讯录的框架构建功能的具体实现初始化通讯录添加联系人删除联系人查找联系人修改联系人打印通讯录排序通讯录检查容量并扩容加载通讯录保留通讯录销毁通讯录 完整代码总结 通讯录的动态实现 模块化编程 分文件 不同模块放在不同的文件下 …

一招鲜吃遍天!CleanMyMac X苹果电脑Mac管家让你的Mac倍儿爽

一招鲜吃遍天&#xff01;CleanMyMac X 苹果电脑Mac管家让你的 Mac 倍儿爽 &#xff0c; 轻松清理、优化、保护你的 Apple 设备&#xff0c;体验前所未有的流畅&#xff0c;在当今数字化时代&#xff0c;我们的生活离不开各类电子设备&#xff0c;尤其是苹果电脑 Mac。 然而&am…

CISP 4.2备考之《安全支撑技术》知识点总结

文章目录 第一节 密码技术第二节 标识和身份鉴别技术第三节 访问控制技术 第一节 密码技术 密码学发展阶段&#xff1a;古典、近代、现代和公钥密码学及特点。 密码系统组成&#xff1a;明文、加密、密钥、解密、密文。 柯克霍夫原则&#xff1a;密钥保密&#xff0c;算法公开…

【Node.js】npx

概述 npx 可以使用户在不安装全局包的情况下&#xff0c;运行已安装在本地项目中的包或者远程仓库中的包。 高版本npm会自带npx命令。 它可以直接运行 node_modules/.bin 下的 exe 可执行文件。而不像之前&#xff0c;我们需要在 scripts 里面配置&#xff0c;然后 npm run …

利用Scala与Apache HttpClient实现网络音频流的抓取

概述 在当今数字化时代&#xff0c;网络数据的抓取和处理已成为许多应用程序和服务的重要组成部分。本文将介绍如何利用Scala编程语言结合Apache HttpClient工具库实现网络音频流的抓取。通过本文&#xff0c;读者将学习如何利用强大的Scala语言和Apache HttpClient库来抓取网…