注销后 JWT 的使用

Posted

技术标签:

【中文标题】注销后 JWT 的使用【英文标题】:Usage of JWT after logout 【发布时间】:2018-07-29 13:37:41 【问题描述】:

我有一个问题,用户注销后是否可以使用当前的 JWT?

场景:我有一组需要授权令牌才能访问端点的私有 API。在这里,我有一个需要登录并获取 JWT 的 Web 应用程序。我将令牌放在一边,并在活动会话中按下注销按钮,即使我能够使用 JWT 访问端点,我的会话也需要到期,这将如何发生这是正确的方法还是我可以提出这个作为一个错误?

【问题讨论】:

【参考方案1】:

这是怎么回事?

会话详细信息可能存储在 JWT 本身中,并且没有服务器端状态。每次您发送 JWT 时,他们都会尝试对其进行解密,然后验证其中存在的声明并提供所需的访问权限。由于 JWT 本身包含其到期信息,因此他们无法使其无效。它将在创建令牌时确定的指定时间后过期。他们可能只是在注销时清除 cookie。

这是正确的方法吗?

视情况而定。这是速度和安全性之间的权衡。为了撤销令牌访问,应该有一个服务器状态维护访问/撤销的令牌集。如果应用程序不存储任何机密/敏感信息,则其设计要求他们选择服务器状态。如果站点在 https 上并且没有 XSS,那么以某种方式获取令牌的唯一方法是获得对设备的物理访问权限。如果访问令牌的到期时间少于 20 分钟,则风险很小。但这主要取决于应用程序的性质。例如,这不是银行应用程序的正确方法。

我可以提出错误吗?

您应该确认假设。有可能他们实际上有一个基础设施来撤销访问令牌,但到目前为止它是错误的。

【讨论】:

感谢@Chaitanya 的回复,1.在我的情况下,访问令牌的有效期为 10 小时,我猜它太高了,容易受到存储型 XSS 的攻击。 2.这不是银行应用程序,它是劳动力管理,所有员工的详细信息和工作工件都存储并批准了更高权限的用户。我认为这是一个错误,因为 API 调用是通过未加密的通道(即 HTTP)传递给服务器的。

以上是关于注销后 JWT 的使用的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot JWT Authentication:登录和注销后触发一个方法

在移动设备上使用 JWT auth 离线注销

在 Lumen 5.4 中注销后 JWT Auth 令牌不会失效

当 jwt 刷新令牌未过期时,React Native 应用程序注销

我正在处理购物车,我如何在用户使用 jwt 注销后记住他的购物车状态

SpringCloud Alibaba微服务实战三十五 - 实现退出登录后注销 jwt token