JWT 令牌撤销:中心化控制与分布式Kafka处理

news2025/2/25 3:38:59

【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等

令牌对于安全数字访问至关重要,但如果您需要撤销它们怎么办?尽管我们尽了最大努力,但有时代币可能会被泄露。这可能是由于编码错误、意外记录、零日漏洞和其他因素造成的。令牌撤销是现代安全性的一个重要方面,确保访问权限掌握在正确的人手中,并且将未经授权的用户拒之门外。在本文中,我们将探讨不同的方法(例如集中式控制和分布式 Kafka 处理)如何在确保系统和数据安全方面发挥重要作用。

访问/刷新令牌

我在本文中描述了有关使用 JWT 的更多信息。JWT 允许您消除使用集中式令牌存储并在每个微服务的中间件层中验证令牌。

为了减轻与令牌泄露相关的风险,访问令牌的生命周期被设置为等于一个较小的时间值(例如,15 分钟)。在最坏的情况下,令牌泄露后,它的有效期还有 15 分钟,之后它将exp小于当前时间,并且令牌将被任何微服务拒绝。

为了防止用户每 15 分钟注销一次,在访问令牌中添加了刷新令牌。这样,用户在身份验证成功后会收到访问令牌/刷新令牌对。当访问令牌的生命周期到期并且用户收到401 Unauthorized响应时,他们应该请求/refresh-token端点,将刷新令牌值作为参数传递,并接收新的访问令牌/刷新令牌对作为响应。之前的刷新令牌变为非活动状态。此过程降低了风险,并且不会对用户体验产生负面影响。

撤销

但在某些情况下,需要立即撤销令牌。这可能发生在金融服务中,或者例如,当用户想要从所有设备注销时,发生在用户的帐户中。在这里,如果没有令牌撤销,我们就无法做到这一点。但是,如何实现撤销 JWT 的机制呢?JWT 本质上是分散的并存储在用户的设备上?

集中式方法

最明显、最简单的方法是组织集中存储。这将是一个令牌黑名单,每个身份验证中间件层除了签名验证和令牌声明验证之外,还会去这个集中存储库检查令牌是否在黑名单中。如果是,请拒绝它。令牌撤销事件本身相当罕见(与授权请求的数量相比),因此黑名单会很小。此外,将令牌永远存储在数据库中是没有意义的,因为它们具有 exp 声明,并且在该值之后,它们将不再有效。如果您系统中发行的令牌的生命周期为 30 分钟,则您可以将已撤销的令牌在数据库中存储 30 分钟。

优点

  • 简单性:与其他解决方案相比,此方法简化了令牌撤销管理。

  • 细粒度控制:您可以细粒度控制撤销哪些令牌以及何时撤销。

注意事项

  • 单点故障:集中式令牌撤销服务可能成为单点故障。您应该实施冗余或故障转移机制来减轻这种风险。

  • 网络开销:微服务需要与中央服务通信,这会引入网络开销。考虑对延迟的影响并进行相应的设计。

  • 安全性:确保中央令牌撤销服务安全实施并防止未经授权的访问。

这种方法提供了令牌撤销管理的集中控制和简单性,这对于某些用例来说是有益的,特别是当需要对撤销进行细粒度控制时。然而,它确实引入了一些网络通信开销,并且需要仔细考虑安全性和冗余性。

去中心化方法(基于 Kafka)

可以使用Kafka实现更先进的无单点故障的方法。Kafka 本质上是一个分布式且可靠的消息日志。它允许多个独立的侦听器和保留策略配置仅存储实际值。因此,可以将已撤销令牌的黑名单存储在 Kafka 中。当令牌需要撤销时,相应的服务会生成一个事件并将其添加到 Kafka。中间件服务包括一个 Kafka 侦听器,用于接收此事件并将其存储在内存中。授权请求时,除了验证令牌的有效性之外,无需联系中心化服务。撤销的令牌存储在内存中,在合适的数据结构中定位令牌是一个快速的过程(如果我们使用 HashMap,它将是O(1))。也没有必要将令牌永远存储在内存中,并且应该在其生命周期结束后定期删除它们。

但是如果我们的服务重新启动并且内存被清除怎么办?Kafka 监听器允许您从头开始读取消息。当微服务恢复时,它将再次从 Kafka 中提取所有消息并使用实际的黑名单。

优点

  • 去中心化:使用像 Kafka 这样的分布式消息代理可以让您以去中心化的方式实现令牌撤销。微服务可以独立订阅撤销消息,无需依赖中央机构。

  • 可扩展性:Kafka 专为高吞吐量和可扩展性而设计。它可以处理大量消息,使其适合管理分布式系统中跨微服务的令牌撤销。

  • 持久性:Kafka 将消息保留可配置的保留期限。这可确保撤销的令牌存储足够长的时间以覆盖其有效期。

  • 弹性:该方法允许微服务处理令牌撤销,即使它们重新启动或经历临时停机。他们可以在恢复后简单地重新使用 Kafka 消息。

注意事项

  • 复杂性:使用 Kafka 实施令牌撤销会增加系统的复杂性。您需要确保所有微服务正确处理 Kafka 主题、订阅撤销消息并管理内存中令牌撤销列表。

  • 延迟:令牌被撤销的时间与微服务使用和处理撤销消息的时间之间可能存在轻微的延迟。在此窗口期间,仍可以接受已撤销的令牌。

  • 可扩展性挑战: 随着系统的增长,跨多个微服务管理大量撤销消息和内存列表可能会变得具有挑战性。您可能需要考虑更高级的策略来分区和管理 Kafka 主题。

集中式令牌撤销方法和基于 Kafka 的方法之间的选择取决于您的具体用例、系统复杂性和偏好。集中式方法提供了简单性和细粒度的控制,但会带来网络开销和潜在的单点故障。基于 Kafka 的方法提供了去中心化、可扩展性和弹性,但实施和维护更加复杂。

结论

在数字安全至关重要的世界中,令牌撤销是一项关键的防御措施。无论您喜欢 Kafka 的集中控制还是分布式处理,核心信息仍然很明确:令牌撤销是强大安全性的重要组成部分。通过有效管理和撤销令牌,组织可以加强防御、保护敏感数据并确保访问权限掌握在正确的人手中。当我们结束关于令牌撤销的讨论时,请记住,主动安全措施是当今数字环境中必须采取的措施。因此,拥抱令牌撤销来保护我们互联世界中最重要的东西。

作者:Viacheslav Shago

更多内容请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

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

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

相关文章

vue+springboot,easyexcel的excel文件下载

文章目录 1.效果展示1.1 前端界面1.2 下载的excel 2.思路介绍3.前端代码展示4.后端代码展示5.核心代码解释 1.效果展示 excel文件单一sheet,多sheet导出 本文主要介绍如何使用easyexcel ,配合前端导出Excel文件。同时提供Excel的两种导出形式&#xff1a…

《扩散模型 从原理到实战》Hugging Face (二)

第二章 Hugging Face简介 本章无有效内容 第三章 从零开始搭建扩散模型 有时候,只考虑事情最简单的情况反而更有助于理解其工作原理。本章尝试从零开始搭建廓庵模型,我们将从一个简单的扩散模型讲起,了解其不同部分的工作原理,…

Learn Prompt-ChatGPT 精选案例:学习各国语言

过去,我们学语言需要花费很多时间来学习各种材料,再联系老师修改口语、作文等,十分费时费力。有了 ChatGPT 之后,我们就相当于有一个免费的,实时反馈的语言学习助手,大大节省了我们的时间。下面我将以英文的…

如何搭建游戏平台?

搭建游戏平台是一个复杂的任务,涉及多个方面的工作。下面是一些关键步骤和注意事项,以帮助您搭建游戏平台: 平台开发:开发游戏平台的关键部分,包括网站或应用程序的开发、数据库设计、用户界面设计、游戏上传和管理工具…

ipad触控笔有必要买原装吗?开学推荐平价好用的电容笔

在日常生活中,电容笔的用途非常广泛,无论是配上电脑,还是配上iPad平板,亦或是配上手机,都是非常不错的办公利器。首先要明确自己什么使用需求,然后才能选择适合自己需要的电容笔。苹果的Pencil拥有独一无二…

VIOOVI干货分享:什么是SOP?它的六要素是什么?

什么是SOP,SOP就是标准化的作业程序。它以文档的形式,详细的描述操作人员在生产操作过程中的操作步骤和应当遵守的事项;是操作人员的操作说明书;也是检查员指导工作的依据。 SOP的六要素是: 物料名称和数量&#xff1…

linux 解决发现不到的 内存占用率

1、问题浮现 项目做久了,你往往会遇到一些稀奇古怪的问题。下面咱就来聊聊关于内存无故使用率变大的真相。事情是这样的,最近一个客户的服务器,内存使用率在90%左右,这很不正常,导致某云的云安全中心一直报警&#xff…

Jenkins结合Gitlab,实现镜像构建及推送

docker-compose jenkins的docker-compose目录为为/home/jenkins,这个后面写脚本的时候需要对应上 version: 3 services:docker_jenkins:restart: alwaysimage: jenkins/jenkins:ltscontainer_name: docker_jenkinsprivileged: true ports:- 8080:8080- 50000:5000…

面试官:ES6中新增的Set、Map两种数据结构怎么理解?

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 一、Set 增删改查 add() delete() has() clear() 遍历 二、Map 增删改查 size set() get() has() del…

深度学习——线性神经网络二

深度学习——线性神经网络二 文章目录 前言一、softmax回归1.1. 分类问题1.2. 网络架构1.3. 全连接层的参数开销1.4. softmax运算1.5. 小批量样本的向量化1.6. 损失函数1.6.1. 对数似然1.6.2. softmax及其导数1.6.3. 交叉熵损失 1.7. 信息论基础1.7.1 熵1.7.2. 信息量1.7.3. 重…

论文阅读-Group-based Fraud Detection Network on e-Commerce Platforms

目录 摘要 1 Introduction 2 BACKGROUND AND RELATED WORK 2.1 Preliminaries 2.2 Related Works 3 MODEL 3.1 Structural Feature Initialization 3.2 Fraudster Community Detection 3.3 Training Objective 4 EXPERIMENT 4.1 Experimental Setup 4.2 Prediction …

征战MINI学习路线

征战MINI学习路线 征战MINI与ACX720开发板的具体差异 1. 时钟电路 管脚约束一样,仅仅是位号名称不同,ACX720的晶振位号是U2,征战MINI的位号是X1,如下图所示: 2. 拨码开关电路 管脚约束一样,仅仅是位…

Spring高手之路5,Dubbo服务注册与发现(文末送书)

目录 一、介绍1、介绍 Dubbo 服务注册与发现的基本概念和重要性2、阐述 Dubbo 服务注册与发现的实现方式和应用场景 二、Dubbo 服务注册与发现的架构设计1、Dubbo 服务注册与发现的总体架构设计。2、Dubbo 服务提供方的注册与发现设计3、Dubbo 服务消费者端的注册与发现设计 三…

iTOP-2K1000开发板拷贝镜像到固态

在本章的刚开始,我们就提到了烧写系统到固态硬盘我们需要使用 U 盘启动作为桥梁,把系统镜像以及系统配置文件拷贝到固态硬盘里面。所以我们需要先准备一个可以成功系统的 U 盘来启动开发板。那此时 U 盘里面是不是就有系统呢?所以这一步我就要…

【python基础】变量

.变量-理解 编程本质就是通过一定的逻辑,去操纵数据,来达到我们的设想。 变量作为数据的载体,在程序中经常会被用到。与变量相联系的还有一个名词叫数据类型,如何理解数据类型-变量-数据三者之间的关系呢? 我们通过文…

进程同步与互斥

目录 进程同步与互斥(1) 第一节、进程间相互作用 一、相关进程和无关进程 二、与时间有关的错误 第二节、进程同步与互斥 一、进程的同步 二、进程的互斥 三、临界区 进程同步与互斥(2) 三、信号量与P、V操作的物理含义…

Git基础操作

前言 本文会向您介绍如何安装git,以及快速地上手add,commit,push,版本回退操作 基础配置 关于windous上的安装git官网已经介绍的很清楚了,您可以直接点入链接windows安装 如果你的平台是centos,以centos…

【树形 DP】树形 DP 的通用思路

题目描述 这是 LeetCode 上的 「310. 最小高度树」 ,难度为 「中等」。 Tag : 「树形 DP」、「DFS」、「动态规划」 树是一个无向图,其中任何两个顶点只通过一条路径连接。 换句话说,一个任何没有简单环路的连通图都是一棵树。 给你一棵包含 …

24.(地图工具篇)geoserver热力图层SLD样式效果

地图之家总目录(订阅之前必须详细了解该博客) 示例效果 一:SLD代码 <?xml version="1.0" encoding="ISO-8859-1"?><StyledLayerDescriptor version="1.0.0"xsi:schemaLocation

【UE 粒子练习】05——创建光束类型粒子

效果 步骤 1. 新建一个材质&#xff0c;这里命名为“Mat_Beam” 设置材质域为表面&#xff0c;混合模式为半透明&#xff0c;着色模型为无光照 材质节点如下&#xff1a; 2. 新建一个粒子系统&#xff0c;命名为“P_Beam” 打开“P_Beam”&#xff0c;在发射器中新建一个光束数…