1

在 nodejs 中水平扩展 JWT 的正确方法是什么。我RSA用来生成令牌。因此,每个服务器都能够解码自己生成的令牌。所有负载平衡都是无状态的,因此无法知道哪个服务器生成了令牌。我正在使用的当前代码是

helper['generateToken'] = (user)=>{
  return new Promise((fullfill,reject)=>{
    try{
      var cert = fs.readFileSync('pvt.key');
      var token = jwt.sign(user,process.env.SECRET);
      fullfill(token);
    }catch(ex){
      reject(new Error("Your token could not be generated"));
    }
  });
}

generateToken功能可以在任何图像上运行,并且它们都具有不同的私钥。什么是最好的扩展方式。

顺便说一句,我在 docker swarm 上运行实例

4

1 回答 1

2

因此每个服务器都能够解码自己生成的令牌。所有负载平衡都是无状态的,因此无法知道哪个服务器生成了令牌。

...而且他们都有不同的私钥。

由于一个服务器可以接收到另一个服务器颁发的令牌,并且您无法区分发起者,因此您需要使用相同的签名密钥。

备择方案

  • 使用共享文件夹或数据库在实例之间共享密钥(从而保护对其的访问)

  • 使用所有实例共享的中央身份验证微服务来签署令牌。如果正在使用密钥对,则可以在每个实例中本地完成签名验证。问题:也需要负载平衡,但可以降低密钥共享的复杂性

  • 测试所有可能的密钥(不是很好):使用非对称密钥对(RSA)并使用所有可用的公钥验证令牌签名以检查是否正确

于 2017-02-02T12:18:21.080 回答