Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 水平缩放Json Web令牌节点_Node.js_Json Web Token_Horizontal Scaling - Fatal编程技术网

Node.js 水平缩放Json Web令牌节点

Node.js 水平缩放Json Web令牌节点,node.js,json-web-token,horizontal-scaling,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

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

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

…并且它们都有不同的私钥。

由于一台服务器可以接收另一台服务器颁发的令牌,而您无法区分发起人,您需要使用相同的签名密钥。

替代品

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

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

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


从标准实践的角度来看与所有服务器共享私钥是一个好主意吗?我不熟悉基于令牌的身份验证,通常不使用会话,因此不确定如何正确实现相同的身份验证。私钥应保持安全。像虚拟化、备份或克隆这样的常见做法总是会带来某种风险。可以使用硬件令牌(例如HSM)来存储密钥,这些密钥有自己的复制和负载平衡机制,但它们很昂贵。。。在设计密钥共享机制时,考虑整个硬件和软件系统的安全性。