2017-02-02 76 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