web-dev-qa-db-ja.com

ロードバランスされたサーバー間でJWTを復号化するためのRSA公開鍵の共有

サーバーでステートレスであり(セッショントークンを格納しない)、複数のサーバー間で負荷分散できるWeb APIのCookieなしの認証メカニズムを実装しようとしています。

クライアント(モバイル電話ギャップクライアント)に返されるJWTを実装しました。これは、sessionStorageに格納され、認証後の要求のヘッダーに追加されます。これは単一のサーバーで完全に正常に機能しますが、私は常に、最初に別のサーバーで認証された要求を処理できるスタンバイサーバーが必要です。このため、異なるサーバー間でキーを共有する必要があると想定しています。

サーバー間で公開鍵または秘密鍵を移動することのセキュリティへの影響を理解していません。それはまったくお勧めできませんか?その場合、どのようにして要件を満たすことができますか?そうでない場合、キーを共有するための標準的な方法はありますか?たとえば、etcdのような分散構成サービス?手動のSSH転送?単一のサーバーで認証を処理し、サーバー間で公開鍵を共有して、APIの残りの部分を呼び出すためのトークンを復号化することをお勧めしますか?

2
dannytoone

キーを共有せず、非対称キーを使用する場合は、各サーバーに個別にキーを設定し、各サーバーに異なるiss(発行者)クレームを設定できます。次に、JWTの受信者は、issクレームに基づいて適切な公開鍵を「検索」できます。私たちのルックアップは基本的に、iss値を公開鍵のファイルシステムの場所にマップする設定ファイルでした。

秘密鍵を共有する必要がある場合は、鍵の配布手法について説明します。多くはあなたがどのくらいの努力を入れたいかに依存します。

3
Patrick