水平缩放Json-Web-Token nodejs

时间:2017-02-02 11:06:29

标签: node.js json-web-token horizontal-scaling

在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上运行实例

1 个答案:

答案 0 :(得分:1)

  

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

     

...并且所有人都有不同的私钥。

由于服务器可能会收到其他服务器发出的令牌,而您无法区分发件人,您需要使用相同的签名密钥。

替代

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

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

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