Node.js 水平缩放Json Web令牌节点
在nodejs中水平扩展JWT的正确方法是什么。我正在使用RSA生成令牌。因此,每台服务器都能够对自己生成的令牌进行解码。所有负载平衡都是无状态的,因此无法知道是哪台服务器生成了令牌。我当前使用的代码是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
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)并使用所有可用公钥验证令牌签名,以检查任何密钥是否正确