2017-02-02 16 views
0

nodejsでJWTを水平に拡大する適切な方法は何ですか?私はRSAを使用してトークンを生成しています。したがって、各サーバーは、それ自身で生成されたトークンをデコードすることができます。すべてのロード・バランシングはステートレスなので、どのサーバーがトークンを生成したかを知る方法はありません。私が使用しています現在のコードはgenerateToken機能は、画像の任意の上で実行することができ、それらのすべてが異なる秘密鍵を持っている水平スケーリングJson-Webトークン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")); 
    } 
    }); 
} 

です。これに合わせて最適な方法は何でしょうか。

ただ、サイドノート私は、各サーバは、自身が生成したトークンをデコードすることができるだろう

答えて

1

ドッキングウィンドウの群れであっインスタンスを実行しています。ロードバランシングはすべてステートレスなので、は、どのサーバーがトークンを生成したかを知る方法がありません。

...これらのすべてが異なる秘密鍵を持っています。

サーバが他のサーバによって発行されたトークンを受け取ることができる、とあなたは同じ署名キーを使用する必要があなたは、発信者を区別することはできませんので。

代替

  • シェア(結果的に、それへのアクセスを保護する)は、共有フォルダまたはデータベースを使用してインスタンス間で秘密鍵

  • 使用するすべてで共有中央認証microserviceトークンに署名するインスタンス。鍵ペアが使用されている場合、署名検証は各インスタンスでローカルに実行できます。問題:また、負荷分散が必要になりますが、あなたは鍵共有の複雑さを軽減することができます

  • テスト可能なすべてのキー(非常に良いではない):非対称鍵ペア(RSA)を使用し、すべての利用可能でトークン署名を検証します公開鍵が正しいかどうかを確認する

+0

「標準のプラクティス」の観点からは、すべてのサーバと秘密鍵を共有するのが良いアイデアですか?私はトークンベースの認証に新しいです、通常セッションを持っていないので、同じものを実装するための適切な方法がわからない – georoot

+1

秘密鍵は安全に保たれるべきです。仮想化、バックアップ、クローニングなどのCommontの慣習は、常に何らかのリスクを負っています。ハードウェアトークン(HSMなど)を使用して、独自のレプリケーションとロードバランシングのメカニズムを持つキーを格納することは可能ですが、コストがかかります...メカニズムを計画する際、ハードウェアおよびソフトウェアシステム全体のセキュリティを考慮してくださいキーを共有する – pedrofb

関連する問題