边缘零信任(第3部分)

边缘零信任(第3部分)

利用JSON Web密钥集扩展JWT验证

上一篇文章中,我们学习了JSON Web令牌(JWT)的概念、创建方法和验证方式。第二部分则演示了如何在简单的Express服务器中使用JWT验证中间件。本篇将深入探讨非对称加密算法,特别是RS256算法,并重点介绍JSON Web密钥集(JWKS)。

术语解释

在开始之前,先了解以下几个关键术语:

JWT (JSON Web Token): 每个请求都需要验证的用于身份验证的信息。算法: JWT使用哈希和签名算法对有效负载进行签名。主要分为两种:对称算法 (例如HS256): 使用相同的密钥进行签名和验证。非对称算法 (例如RS256, ES256, PS256): 使用公钥/私钥对。私钥用于签名,公钥用于验证。 理解底层哈希和签名算法的细节并非理解核心工作流程的必要条件。JSON Web密钥集 (JWKS): 本篇的重点,用于管理密钥轮换。公钥/私钥: 一对加密证书,私钥用于签名,公钥用于验证。公钥可以公开,而私钥必须保密。

JWKS的优势

第二部分中,我们演示了根据令牌的alg声明和环境变量或公钥来验证对称或非对称算法。本部分将专注于非对称算法,特别是RS256。

使用公钥/私钥对的优势在于,验证过程无需私钥离开签名服务器。公钥可以公开,且无法反向推导出私钥。因此,公钥可在任何地方加载,从而实现任何地方的令牌验证。

然而,如果定期轮换公钥(强烈建议这样做),就会出现一个短暂的窗口期,导致证书不匹配:服务器使用新的私钥签名令牌,而验证端点仍持有旧的公钥,导致验证失败。JWKS提供了一种更优的密钥轮换管理方法。

当发行系统签署JWT时,用于签名的私钥的kid(密钥ID)包含在令牌的头部。验证系统读取alg和kid,并使用具有相同kid的公钥验证签名。JWKS是一个JSON对象,包含一个或多个包含其kid的公钥。令牌头部包含kid声明:

{  "alg": "rs256",  "typ": "jwt",  "kid": "12345"}

登录后复制

kid可以是任何字母数字字符串。JWKS包含一个密钥数组,每个密钥对象如下:

{  "kty": "RSA",  "use": "sig",  "kid": "12345",  "n": "...",  "e": "..."}

登录后复制

请注意每个密钥都有一个kid;令牌头部必须包含相同的kid才能加载正确的公钥。 n和e包含构建公钥所需的信息。库如jsrsasign可以导入这些信息并构建用于验证令牌的公钥。

JWKS的访问和更新

虽然JWKS提供了多密钥管理的序列化格式,但手动更新多个端点上的JWKS仍然很麻烦。更好的策略是利用自动发现,将密钥集托管在一个已知的URI上,以便客户端可以定期自动更新。例如,Microsoft Azure AD将其JWKS存储在https://www.php.cn/link/7153f307b5c0c430849e99573d3f3176。 当需要轮换密钥时,只需将新的公钥添加到集合并重新发布JWKS即可。客户端定期轮询URI获取最新的公钥。

密钥生成

前面提到了公钥/私钥对。您可以自己生成,但通常不建议使用自签名密钥,因为某些云提供商和验证软件包不允许使用。 建议使用Let’s Encrypt生成签名的密钥。

首先,确保已安装并更新Certbot。然后,使用以下命令生成2048位RSA私钥:

certbot certonly   --manual   --preferred-challenges dns-01   --key-type rsa   -d jwks01.yourdomain.com

登录后复制

Certbot会提供一个TXT记录,需要将其添加到_acme-challenge.jwks01.yourdomain.com。(子域名称可自定义)。验证后,Certbot会在默认位置(例如/etc/letsencrypt/live/jwks01.yourdomain.com)生成四个文件。我们主要关注privkey.pem(RSA私钥)和fullchain.pem(证书签名链)。将这两个文件复制到项目目录。

使用以下命令从私钥生成公钥:

openssl rsa -in privkey.pem -pubout -out pubkey.pem

登录后复制

您现在拥有签名的RSA私钥及其对应的公钥。 下一部分将介绍如何修改之前的Express-JWT示例,以导入这些密钥,在已知的URI上提供JWKS服务,并使用JWKS验证由不同私钥签名的多个令牌。

进一步阅读:

私钥和公钥 – ssl.com快速入门JWKS属性 – Auth0对JSON Web密钥属性的深入探讨RSASSA-PSS – 深入了解RSXXX令牌和PSXXX令牌签名过程的差异

以上就是边缘零信任(第3部分)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2640348.html

(0)
上一篇 2025年3月7日 06:16:39
下一篇 2025年3月3日 06:40:06

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 使用Seerbit接受多种货币:开发人员指南

    在全球化市场中,支持多种货币对企业吸引多元化客户至关重要。允许客户使用其偏好货币支付,不仅提升用户体验,还能显著提高交易转化率。 领先的支付网关 Seerbit Seerbit 提供强大的多货币功能,使企业能够流畅地处理来自全球各地的支付。…

    2025年3月7日
    200
  • 探索chatgpt开发的挑战和局限性

    ChatGPT:机遇与挑战并存 OpenAI研发的ChatGPT彻底改变了人机交互方式,其应用范围涵盖客户支持、内容创作等诸多领域。然而,ChatGPT的发展并非一帆风顺,仍面临诸多挑战与局限。本文将深入探讨这些问题,并提出相应的应对策略。…

    2025年3月7日
    200
  • 付款集成:使用OAuth进行安全令牌的身份验证

    Razorpay 付款集成:基于 OAuth 的安全访问 概述 本文介绍如何将 Razorpay 安全地集成到您的应用中,实现无缝的支付处理。Razorpay 支持基于 OAuth 的身份验证,允许应用安全地访问资源,无需泄露敏感凭据。我们…

    2025年3月7日
    200
  • 优化AI工作负载:性能和可伸缩性策略

    在当今的数字化浪潮中,基于云托管服务的AI工作负载已成为各行业创新的基石,从预测性分析到自然语言处理,无处不在。然而,随着企业对AI解决方案的采用日益广泛,优化性能和可扩展性变得至关重要。低效的AI工作负载可能导致成本飙升、洞察延迟以及部署…

    2025年3月7日
    200
  • 使用NextJS尾风CSS和Framer Motion建立现代投资组合

    大家好!我最近用现代Web技术构建了一个投资组合网站(4sish.vercel.app),并乐于分享我的开发经验。 技术栈: Next.js 13 App Router (类型安全TypeScript)Tailwind CSS (样式)Fr…

    2025年3月7日
    200
  • 什么是TS中的浅副本和深拷贝

    深拷贝与浅拷贝详解 JavaScript 中复制对象或数组时,可以选择进行浅拷贝或深拷贝。理解两者差异至关重要,尤其在处理复杂数据结构时。 内存与引用机制 JavaScript 对象和数组是引用类型。将它们赋值给变量时,实际赋值的是内存地址…

    2025年3月7日
    200
  • TS中经常用于开发的数组方法

    本文介绍TypeScript Web开发中常用的数组方法,并附带示例和说明: 1. map() 用途: 创建一个新数组,新数组的每个元素都是原数组对应元素调用指定函数后的结果。用例: 数据转换,例如将数字数组转换为字符串数组。 2. fil…

    2025年3月7日
    200
  • 单元测试生成器:自动化效率的软件测试

    手动编写单元测试既费时费力又容易出错。开发人员常常难以在快速迭代的开发周期中保持高测试覆盖率。单元测试生成器应运而生,它能自动化单元测试的创建过程,从而以最小的精力确保全面的代码验证。本文将探讨单元测试生成器的运作方式及其在现代软件开发中的…

    2025年3月7日
    200
  • 如何在nodejs中使用sqlite构建矢量数据库

    SQLite凭借其轻量、快速和经过实战检验的特性,广泛应用于各种系统,从大型系统到微型嵌入式设备,甚至网络浏览器和Android手机都依赖于它。 如今,AI技术日新月异,大型语言模型(LLMs)也正朝着小型化、高效化的方向发展。通过量化等技…

    2025年3月7日
    200
  • 同步和异步(异步)

    同步编程 同步任务按顺序执行,每个任务必须完成才能开始下一个任务。 这可能会导致程序在执行耗时任务时卡住或无响应。 异步编程 异步任务可以在不阻塞程序主线程的情况下执行。这意味着程序可以在处理其他任务的同时执行耗时操作(例如,服务器数据查询…

    2025年3月7日
    200

发表回复

登录后才能评论