理解 JWKS(JSON Web 密钥集)(jwt 密钥)
myzbx 2025-07-24 20:21 6 浏览
JWTs或JSON Web Tokens最常用于识别经过身份验证的用户并验证API请求。在这个验证过程中,需要使用加密密钥来验证JWT的完整性,以确保它没有被篡改。用于这个过程的密钥集被称为JWKS或JSON Web Key Set。在本博文中,我们将介绍JWKS是什么以及它们的使用方式。
什么是JSON Web Keys(JWKS)?
JSON Web Keys(JWKs)是表示加密密钥的JSON数据结构。这些密钥主要用于在OAuth流程中验证JWT。JWKs旨在易于交换,使它们成为表示加密密钥的标准化和可互操作的格式。
JWKS的结构
一个示例的JWKS将具有以下布局:
{
"jwk":
[
{
"alg":"RSA",
"mod": "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx 4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMs tn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2 QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbI SD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqb w0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw",
"exp":"AQAB",
"Kid":"2011-04-29"
}
]
}
一个JWK由一个JWK容器对象组成,它是一个包含JWK密钥对象数组的JSON对象。JWK容器对象成员的值可以根据使用的算法而改变。上面的示例包含一个使用RSA算法的单个成员,并具有以下成员:
- alg :此成员标识与密钥一起使用的加密算法。
- mod :包含RSA公钥的模值。它是base64编码的。
- exp :RSA公钥的指数值。它是base64编码的。
- kid :密钥ID用于匹配特定密钥。在密钥轮换期间,kid用于在JWK中选择一组密钥。
JWKS如何工作?
为了确保JWT没有被篡改,我们需要通过验证签名来验证其完整性。这需要与授权服务器使用的私钥对应的公钥。通常,可以通过查询授权服务器暴露的端点来检索JWKS,这个端点被称为“JWKS端点”。
使用JWKS的好处
- 安全性 :JWKS通过集中密钥管理实现了关注点的分离。这种分离减少了意外暴露关键密钥的风险,与硬编码密钥相比,这是一种更安全的方法。
- 可扩展性 :随着Web应用程序的复杂性增加,以可扩展的方式管理加密密钥变得至关重要。JWKS提供了一种标准化的处理密钥的方式,简化了应用程序扩展时的密钥分发和轮换。
- 互操作性 :JWKS旨在在不同平台和服务之间轻松交换。这种互操作性促进了认证生态系统各个组件之间的无缝集成。
JWKS实施的考虑事项
对于大多数用户来说,您将使用认证提供程序,不必处理设置您自己的授权服务器,但如果您决定自己实现流程,以下是一些确保系统安全性的关于JWKS的建议:
- 定期密钥轮换 :频繁地轮换JWKS中表示的加密密钥,以最小化潜在密钥泄露的影响。
- 访问控制 :限制对JWKS端点的访问,只允许授权的客户端,并实施适当的访问控制机制。
- 安全密钥存储 :安全地存储加密密钥,采用硬件安全模块(HSM)或基于云的密钥管理服务(KMS)等行业标准做法。
结论
在身份验证方面,有许多术语和协议被提出,当您刚开始时可能会感到困惑。我们希望通过本文,您对JWKS及其与JWT的相关性以及它们的使用有了更好的理解。
相关推荐
- 大白话讲nnvm(大白话讲解什么是卷积)
-
之前工作经验中,在某大厂,开发过机器学习框架,在和业务同学的合作下,取得还可以的成绩,但是一直觉得缺少了什么,最近在刷ai-system相关的公开课,才明白计算图的重要性,以往觉得不能理解的东西,现在...
- Python之Json模块详解(python.json()用法)
-
Step1:Json是什么JSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式。具有数据格式简单,读写方便易懂等很多优点。许多主流的编程语言都...
- 最新潮最流行的影音资源——MAU影视
-
MAO影视,一款完全免费的影视软件,为您带来最新潮最流行的影音资源,软件本身并不具备任何资源,只是作为一款播放器提供给大家。配合相关的接口链接,即可为您呈现丰富多彩的影音节目。软件版本支持:1.安卓2...
- Python版的迷你程序——json文件转换为csv
-
浅话C语言是过去几十年软件和硬件两个阵营之间,签署的最坚实的契约。硬件为C语言的语义提供了最能发挥其性能的基础构件,而软件虽然搞了很多的圆环套圆环般的层次,但最终都以C语言作为最后的沉淀收尾。----...
- 没硬盘、网盘也能看片自由!NAS一键部署MoonTV,随时随地爽看。
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:羊刀仙有没有一个应用服务,能满足既没有足够预算购置硬盘,也不想依托网盘的朋友的家庭观影需求?之前我介绍过LibreTV,本篇再来看看另一个更...
- 用云存储30分钟快速搭建APP,你信吗?
-
背景不管你承认与否,移动互联的时代已经到来,这是一个移动互联的时代,手机已经是当今世界上引领潮流的趋势,大型的全球化企业和中小企业都把APP程序开发纳入到他们的企业发展策略当中。但随着手机APP上传的...
- Python的dict和json区别(python中dict的特点)
-
大家有没有发现,python中的字典类型的数据结构,和我们目前比较流行的web端的json格式,非常类似,几乎有点分不清了。那么这2者的区别是什么呢?首先,从概念上,我们要理解这2者是截然不同的。py...
- 越晚搞懂 MySQL JSON 数据类型,你就越吃亏
-
作者介绍陈臣,甲骨文MySQL首席解决方案工程师,公众号《MySQL实战》作者,有大规模的MySQL,Redis,MongoDB,ES的管理和维护经验,擅长MySQL数据库的性能优化及日常操作的原理剖...
- 揭秘你不会画“信息结构图”的本质
-
编辑导语:产品信息结构图有助于清晰地展示产品信息,一定程度上可以为后台上传数据提供依据,但不少人可能觉得产品信息结构图很难,这可能是对数据库表结构不理解等因素导致的。本篇文章里,作者就产品信息结构图的...
- python之json基本操作(.json python)
-
1.概述JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它具有简洁、清晰的层次结构,易于阅读和编写,还可以有效的提升网络传输效率。Python标准库的...
- JWT 和 JJWT 还傻傻的分不清吗(jwt jti)
-
JWTs是JSON对象的编码表示。JSON对象由零或多个名称/值对组成,其中名称为字符串,值为任意JSON值。JWT有助于在clear(例如在URL中)发送这样的信息,可以被信任为不可读(即加密的)、...
- 比json快20-100倍!protobuf原理深入剖析
-
一、protobuf语法指南1.1定义一个消息类型先来看一个非常简单的例子。假设你想定义一个“搜索请求”的消息格式,每一个请求含有一个查询字符串、你感兴趣的查询结果所在的页数,以及每一页多少条查询结...
- 了解一下ProtoBuf(了解一下相亲对象的年龄)
-
序列化与反序列化我们在进行网络通信调用的时候,总是需要将内存的数据块经过序列化,转换成为一种可以通过网络流进行传输的格式。而这种格式在经过了传输之后再经过序列化,能还原成我们预想中的数据结构。那么我们...
- JSON数据类型详细总结(json数据类型详细总结怎么写)
-
JSON详解一、JSON的概述及其使用JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它基于javascript的一个子集。JSON是的数据交换语言,易...
- 接口自动化测试之JSON Schema模式该如何使用?
-
JSONSchema模式是一个词汇表,可用于注释和验证JSON文档。在实际工作中,对接口返回值进行断言校验,除了常用字段的断言检测以外,还要对其他字段的类型进行检测。对返回的字段一个个写断言显...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)
- JS Loop For (32)