2017-02-02 38 views
0

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

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功能可以在任何图像和他们都运行有不同的私钥。什么可能是最好的方式来扩大与此。

只是一个方面说明我对码头工人群

回答

1

运行有实例,使每个服务器将能够通过自身生成的凭证进行解码。所有的负载均衡是无状态的,所以没有办法知道哪个服务器生成了令牌。

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

由于服务器可能收到对方服务器发放的令牌,你不能区分的鼻祖,您需要使用相同的签名密钥。

替代

  • 份额实例之间的秘密密钥使用共享文件夹或数据库(因此保护对它的访问)

  • 使用所有国家的共同中心认证的microService实例签署令牌。如果正在使用密钥对,则签名验证可以在每个实例的本地完成。问题:还需要负载均衡,但可以减少的密钥共享复杂

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

+0

从标准做法的角度来看,与所有服务器共享私钥是个好主意?我是基于令牌的身份验证的新手,通常无法使用会话,所以不确定实施相同的方法是什么 – georoot

+1

私钥应该保持安全。像虚拟化,备份或克隆这样的Commont实践总是会带来某种风险。有可能使用硬件令牌(例如HSM)来存储密钥,这些密钥具有自己的复制和负载平衡机制,但是它们很昂贵...因此,当您计划机制时,考虑整个硬件和软件系统的安全性分享钥匙 – pedrofb