5

我正在使用带有节点的 JWT (jsonwebtoken) 包进行令牌处理。

有没有办法“注销”/撤销/使令牌无效?

4

3 回答 3

1

如果您只想注销当前用户,就像@Massimiliano 说的那样,它通常通过从您用来跟踪它的任何客户端存​​储(例如cookie)中删除令牌来实现。

如果您出于安全原因需要撤销,这里有一篇文章讨论了为什么您可能不想首先使用 JWT,而是使用常规的、不透明的 Bearer 令牌(通过将它们存储在数据库中来实现,通常使用安全随机字符串作为他们的 ID)。

https://www.dinochiesa.net/?p=1388

基本上,如果不添加数据库查找,它们是不可撤销的(否定使用 JWT 的主要原因之一)。在需要通过用户界面撤销的情况下,您将希望能够通过或类似方式查询令牌user_idgroup_id因此您将希望能够通过该信息索引令牌,而不是拥有它在 JWT 声明中不透明。

于 2016-03-14T22:10:08.950 回答
0

使用 jwt 身份验证,无需在数据库中插入令牌,如果您想撤销/注销/使令牌无效,只需在您决定存储它(cookie 或标头)的浏览器中本地删除它,在那个在下一次调用任何路由(受身份验证保护)的情况下,如果有一个好的程序员,服务器应该再次要求您进行身份验证。

希望这有帮助,Ciao。

于 2015-10-28T23:58:41.423 回答
-1

我喜欢有这个问题,我是这样决定的:首先我为数据库创建模型会话,如下所示:

var SessionSchema = new Schema({
    user_id:   { type: String, required: true },
    tokenHash: { type: String, required: true }
});

创建令牌后我保存会话,当用户在我的“checkSession”中间件中执行某些操作时,我在数据库中搜索令牌,如果他存在我验证他,如果不存在发送 auth_error,如果令牌存在于数据库中但已过期,我将他从数据库中删除并发送 auth_error,如果我删除或阻止用户,我会从数据库中删除会话。

试试吧,也许这对你有帮助。

于 2015-03-05T11:46:46.323 回答