将 JSON Web 令牌列入黑名单

Posted

技术标签:

【中文标题】将 JSON Web 令牌列入黑名单【英文标题】:Blacklisting JSON web token 【发布时间】:2016-12-30 08:37:56 【问题描述】:

我正在使用jwt-simple 节点模块:。

如何将令牌列入黑名单?

【问题讨论】:

您存储了一个包含所有黑名单令牌的列表,并将传入的令牌与此列表进行比较? JWT 并不是要被列入黑名单,而是要过期。 Invalidate JWT Token in NodeJS的可能重复 您有不同的选项在到期时间之前使令牌失效***.com/questions/37507714/… 请看***.com/questions/21978658/… 【参考方案1】:

1) 只需从客户端移除令牌

2) 创建令牌黑名单

3) 只需缩短令牌到期时间并经常轮换它们

请看 Invalidating JSON Web Tokens

【讨论】:

【参考方案2】:

将 jwt 令牌列入黑名单或销毁的简单方法: 使用jwt-blacklist 模块

通过$ npm install jwt-blacklist安装它

示例:

const jwt = require('jsonwebtoken');
const jwtBlacklist = require('jwt-blacklist')(jwt);

let token = jwtBlacklist.sign(
       feeling: 'awesome'
   , 'secret', expiresIn: '2h');


jwtBlacklist.blacklist(token); // destroy the token

jwtBlacklist.verify(token); // throw error token expired or destroyed

【讨论】:

【参考方案3】:

长话短说,你没有。

您设置较短的过期时间并等待令牌过期。

如果您需要快速注销,其代价是需要您的应用经常登录。

Robert Rossman answer 解释另一种方法。

【讨论】:

感谢您的回答,但这并不能解释我的问题。我可以将访问令牌放入我想要黑名单但我不想访问数据库的数据库中。 我再说一遍:JWT 不应该被列入黑名单。它们会在设定的时间后自行过期。想要快速注销?缩短过期时间,但用户将不得不经常要求新令牌。不希望用户每次都询问?设置较长的过期时间,忘记注销。 想要将智威汤逊列入黑名单就像用铲子吃饭一样。当然,你可以以某种方式做到这一点。但是你可能会掉一两颗牙齿,把自己弄得一团糟,过得很艰难。要么用叉子吃饭,要么用铲子挖。如果您需要注销,请使用会话。需要智威汤逊?使用过期时间。 当我使用 Laravel 时,有函数 revokeToken()。如果有人拿走了您的访问令牌,而您想立即删除该令牌,那会出现问题,该怎么办? 那么您未能在令牌上设置足够短的到期时间。还有其他方案可以防止这种情况发生,但您会在 SO 中您的问题的多个副本中找到它们。

以上是关于将 JSON Web 令牌列入黑名单的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Simple JWT(django rest)将 JWT 令牌列入黑名单?

使用 Laravel JWT 重新认证时将旧令牌列入黑名单

Laravel JWT 令牌总是被列入黑名单

JWT 注销:在微服务架构中的服务之间共享被列入黑名单的无效令牌

将 react-native 模块列入黑名单不起作用

为 Spring Boot 制作黑名单 JWT 令牌