我们的应用程序具有部署在Azure AKS上的Node.js Express Web服务器。它将某些数据持久保存到同一集群中的一个小型MongoDB容器中。
我们当前正在将每个用户的访问令牌和刷新令牌存储在数据库中,并使用密钥进行加密。密钥是在部署期间创建的,并存储在运行Web服务器的容器中。因此,这不仅是“隐藏”在我们的代码或任何其他内容中。我希望这足够安全。
但是我开始认为也许我们也应该以某种方式对每个令牌加盐,这样,如果我将令牌从用户A复制到包含用户B的MongoDB文档中,B将无法解密令牌(然后能够只是获取用户A的数据)。这并不是一个真正合理的攻击媒介(我希望)-如果攻击者可以访问我们的数据库,我们将面临另一种麻烦。但是我认为这可能是个好习惯。
最简单的方法是对数据库中的“ token | userId”进行加密。解密令牌后,应用程序代码可以验证其以当前用户的userId结尾。
但是,这并不能真正改善加密性。只是“决定”不使用其他用户令牌的应用程序层。这样做是否有意义?
更可靠的解决方案是在创建密码密钥时使用userId / salt。但是随后服务器将需要不断创建这样的密钥,因为来自不同用户的不同请求会到达,而不是仅在服务器启动时在内存中创建一次。我想我们可以为此添加一些缓存解决方案,以提高效率。但是,对于根本不需要的东西来说,这太过分了吗?