使用JWT撤消/使令牌无效

时间:2015-03-05 10:27:12

标签: node.js jwt json-web-token

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

有没有办法退出" /撤销/无效令牌?

3 个答案:

答案 0 :(得分:1)

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

希望这个帮助,ciao。

答案 1 :(得分:1)

如果你只想记录当前用户,就像@Massimiliano所说,它通常是通过从你用来跟踪它的任何客户端商店中删除令牌来实现的(例如cookies)。

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

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

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

答案 2 :(得分:-1)

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

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

创建令牌后我保存会话,当用户在我的" checkSession" midleware我在db中搜索令牌,如果他存在我验证他,如果不存在则发送auth_error,如果令牌存在于db但已过期,我将其从db中删除并发送auth_error,如果我删除或阻止用户我从db中删除会话。

试试,也许这可以帮到你。