节点&基于令牌的安全性

时间:2015-12-11 16:39:04

标签: node.js authentication jwt

我正在构建一个包含用户身份验证API的节点Web应用程序。

我在网上阅读的每个教程都使用类似配置文件的内容来存储用于生成jwt的服务器密钥,然后将其传递给使用它的客户端,直到验证到期为止。

我的问题在于将一个密钥存储在某个地方 - 任何地方 - 从中​​生成所有令牌的概念。我觉得如果有人得到这个秘密,他们可以欺骗令牌,例如对于其他用户等

对于每个单独的用户,或者甚至每个单独的令牌,都不可能存在更复杂的系统,例如多个秘密,然后这些多个秘密存储在它们自己的单独数据库集合中。这样一来,如果每个人都想出一个秘密,它可能会将损害限制在一个特定的令牌上,最终会到期吗?

感谢。

1 个答案:

答案 0 :(得分:1)

现在你有10,000个独立的秘密(10,000个用户),而不是一个你必须保护的秘密?那存储在DB中?每次读取JWT时调用DB都会增加另一个延迟来解码JWT。

然后来到第二期。你怎么知道要查找哪一个?使用单个机密签名的JWT,您可以打开它,获取用户ID并查找用户。

但是如果JWT使用未知秘密签名,您需要其他方式来了解这是哪个用户。 URL中的UserID?另一个贴值?然后进行查找?

第3名:你打开了一个用无效令牌锤击你的人。在您的方案中,如果您遇到100,000个不良令牌,您必须查询数据库100,000次以尝试查找它们的密码?如果您有一个密钥(该节点在内存中),它会快速识别坏令牌并将其发送到登录屏幕,这样就不会破坏您的数据库并影响您的有效用户。