安全认证机制之JWT

文章目录

  • 前言
  • 一、JWT是什么
  • 二、为什么要用JWT
  • 三、JWT的组成
  • 四、JWT的应用场景
  • 总结


前言

  在我们实际开发中会接触到很多安全认证机制,诸如HTTP Basic Auth、OAuth、Cookie-session Auth、Token Auth、JWT等等,今天我们就来聊一下基于JWT的Token认证机制。


一、JWT是什么

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


二、为什么要用JWT

与简单的 Web 令牌(SWT) 和安全断言标记语言令牌 (SAML)相比,让我们来谈谈 JSON Web 令牌(JWT)的好处。

  • 由于 JSON 比 XML 更冗长,因此在编码时,其大小也更小,使 JWT 比 SAML 更紧凑。这使得 JWT 成为在 HTML 和 HTTP 环境中传递的一个不错的选择。

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

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

  • 在使用方面,JWT 在互联网规模上使用。这突出了在多个平台(尤其是移动平台)上对 JSON Web 令牌进行客户端处理的便利性。


三、JWT的组成

  • Header 头部

    ‎头‎‎通常‎‎由两个部分组成:令牌的类型(即 JWT)和正在使用的签名算法,如 HMAC SHA256 或 RSA。‎

    例如:

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

    ‎然后,此 JSON 是‎‎Base64Url‎‎编码,以形成 JWT 的第一部分。‎

  • Payload 负载 (类似于飞机上承载的物品)

    令牌的第二部分是有效载荷,其中包含有效信息。有效信息包含三个部分:

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

    公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密.

    1. 私有的声明:

    这些是为在同意使用它们的各方之间共享信息而创建的自定义声明,既不是注册的声明,也不是公共的声明。

    例如:

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

    ‎然后,对有效载荷进行‎Base64Url‎‎编码,以形成 JSON Web 令牌的第二部分。‎

    ewogICJzdWIiOiAiMTIzNDU2Nzg5MCIsCiAgIm5hbWUiOiAiSm9obiBEb2UiLAogICJhZG1pbiI6IHRydWUKfQ==
    
  • Signature 签名/签证

    令牌的第三部分是签名,要创建签名,必须使用Base64Url‎编码后的Header头部、Base64Url‎编码后的Payload 载荷和一个secret(盐),Header头部和Payload 载荷使用.连接组成的字符串,通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。

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

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

    签名用于验证信息,在途中没有更改,并且对于使用私人密钥签名的令牌,还可以验证 JWT 的发送者是否为其所声明的发送者。

    注意:secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。


四、JWT的应用场景

  • Authentication(鉴权) : 这是使用JWT最常见的情况。 一旦用户登录,每个后续请求都将包含JWT,允许用户访问该令牌允许的路由,服务和资源。 单点登录是当今广泛使用JWT的一项功能,因为它的开销很小,并且能够轻松地跨不同域使用。

  • Information Exchange(信息交换) : JSON Web Tokens是在各方之间安全传输信息的好方式。 因为JWT可以签名:例如使用公钥/私钥对,所以可以确定发件人是他们自称的人。 此外,由于使用标头和有效载荷计算签名,因此您还可以验证内容是否未被篡改。


总结

  • 本文简单讲述了JWT是什么,有哪些部分组成的,有什么应用场景等等。
  • 欢迎大家提出建议以及批评,有任何问题可以私信。

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

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

相关文章

AI+量化03_股票数据获取

文章目录 思维导图问答之纯小白 vs GPT4 目标: 掌握量化金融知识、使用Python进行量化开发 背景:纯小白 参考资料:https://github.com/datawhalechina/whale-quant 本章是学习了股票数据的获取: 理论层面:包括股票数据的分类和常…

非诚勿扰宝马女起诉离婚事件:物质固然重要,但婚姻不是儿戏,需慎重对待...

媒体报道,近日,曾因《非诚勿扰》节目中一句“宁愿坐在宝马车里哭,也不坐在自行车上笑”而引发广泛争议的马某,如今再次成为舆论的焦点。 她所描述的闪婚后半年内遭受的家暴情况,不仅是对她个人生活的巨大冲击&#xff…

【AIGC】CLIP

CLIP的基本原理 对比学习: Clip使用对比学习来训练模型。对比学习的目标是通过将正样本(相似的图像和文本对)与负样本(不相似的图像和文本对)进行比较,从而使模型学会区分不同样本之间的差异。这有助于模型…

自然语言处理--基于HMM+维特比算法的词性标注

自然语言处理作业2--基于HMM维特比算法的词性标注 一、理论描述 词性标注是一种自然语言处理技术,用于识别文本中每个词的词性,例如名词、动词、形容词等; 词性标注也被称为语法标注或词类消疑,是语料库语言学中将语料库内单词…

【其他-闲谈】关于博客排行榜

今天在学习内核驱动,有个常量不知道什么意思,然后在一篇博客上找到了答案——GFP_KERNEL的作用 偶然注意到作者排行50,然后往下看了看,想知道为什么他排行这么靠前,看这文章数量,估摸着一天一篇&#xff0c…

百度搜索智能精选是什么东西、怎么加入?

百度搜索智能精选是什么? 提问及具体展示如上图,这是白杨SEO一个好友提问的。他是觉得这个入口篇幅这么大,做宣传推广不错,问我是什么,怎么可以加入进去? 其实这就是百度搜索智能精选,只能是P…

浪花 - 查询队伍列表

一、接口设计 1. 请求参数:封装 TeamQuery package com.example.usercenter.model.dto;import com.example.usercenter.common.PageRequest; import lombok.Data;/*** author 乐小鑫* version 1.0* Date 2024-01-22-20:14*/ Data public class TeamQuery extends …

Stable Diffusion学习

参考 Stable Diffusion原理详解_stable diffusion csdn-CSDN博客 Stable Diffusion是stability.ai开源的图像生成模型,可以说Stable Diffusion的发布将AI图像生成提高到了全新高度,其效果和影响不亚于Open AI发布ChatGPT。 图像生成的发展 在Stable D…

【RT-DETR有效改进】轻量化ConvNeXtV2全卷积掩码自编码器网络

前言 大家好,我是Snu77,这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进,内容持续更新,每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本,同时修改内容也支持Re…

解决docker desktop 登录不上账号的问题

一、背景 点击“Sign in”,一直卡在Verifying credentials...,重试也没用。 二、解决办法 1、macOS下载并安装Proxifier 2、配置Proxifier 配置Proxies 配置rule 其中的Applications填:"Docker.app"; "Docker"; com.…

Java语言第三篇集合

集合 集合List集合ArrayListLinkedList泛型SetTreeSet集合特点数据结构HashSet集合Map集合HashMapTreeMap可变参数创建不可变集合 集合 集合和数组的对比 数组的长度是不可变的,集合的长度是可变的。数组可以存基本数据类型和引用数据类型。集合只能存引用数据类型…

「nuxt2配置tailwindcss」nuxt2添加tailwindcss详细步骤!解决版本不对称各种报错~~

1.插件下载 官方地址 npm install -D nuxtjs/tailwindcss3.4.3 tailwindcss3.4.1 postcss^8.4.33 autoprefixer10.4.17 2.nuxt.config.js配置 module.exports {// ...buildModules: [nuxtjs/tailwindcss],// ... }3.tailwind.config.js npx tailwindcss init module.exports…

【NVIDIA】Jetson Orin Nano系列:Qt+Gstreamer(02):gstreamer输出图像到Qt控件上

1、pro配置 QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++17LIBS +=-lglib-2.0 LIBS +=-lgobject-2.0 LIBS +=

复合机器人颠覆传统上下料,实现高效精准生产

在追求高效、精准生产的现代制造业中,传统的上下料方式已经无法满足企业的需求。复合机器人的出现,为制造业带来了革命性的变革。它不仅提高了生产效率,降低了生产成本,还为企业创造了更大的竞争优势。复合机器人的广泛应用&#…

记录php 生成树

经常用php 生成树形结构,这里记录一遍 有两种方法 第一种是引用调用,特点是运行速度快,只需要循环一遍,但是无法动态修改里面数据 第二种是递归调用,可以动态调用数据 结论: 如果数据在几十条建议使用 …

openssl3.2/test/certs - 023 - EC cert with explicit curve

文章目录 openssl3.2/test/certs - 023 - EC cert with explicit curve概述笔记END openssl3.2/test/certs - 023 - EC cert with explicit curve 概述 openssl3.2 - 官方demo学习 - test - certs 并没有看到指定了椭圆曲线的参数, 还是rsa证书. 可能后面的脚本会生成指定了…

SpringBoot 整合redis

1、添加项目依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test&l…

【复现】万户ezoffice协同管理平台 SQL注入漏洞_26

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 万户ezOFFICE协同管理平台分为企业版和政务版。 解决方案由五大应用、两个支撑平台组成&#xff0c;分别为知识管理、工作流程、沟…

小新22-IAP,24-IAP,27-IAP(F0GG,F0GH,F0GJ)原厂Win11.22H2系统

lenovo联想小新22寸,24寸,27寸IAP原装出厂Windows11系统镜像还原包&#xff0c;恢复出厂开箱状态 适用型号&#xff1a; 联想小新27-IAP(F0GJ),小新24-IAP(F0GH),小新22-IAP(F0GG) IdeaCentre AIO 3 22IAP7,IdeaCentre AIO 3 24IAP7,IdeaCentre AIO 3 27IAP7 链接&#xff1…

每日一练:LeeCode-257、二叉树的所有路径【二叉树】

本文是力扣LeeCode-257、二叉树的所有路径 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子…