1

クラスター化されたセッションを実装するために、1 つの nginx、2 つの tomcat、および 1 つの redis サーバーで Spring セッションを正常に使用し始めましたが、いくつかの疑問が生じました。まず第一に、異なるアプリケーションについて話すときは、2 つの完全なアプリケーションを意味します。同じアプリケーションの 2 つのインスタンスについては話していません。

2 つ以上の異なる spring-session アプリケーションを使用して、本番環境の Redis サーバーが 1 つだけのセッションを保存できますか?

これらのアプリケーションは異なる tomcats インスタンスで実行できますか?

Springセッションは、1つのredisサーバーを持つ異なるアプリケーション間のセッションIDの競合をどのように回避しますか?

この問題を回避するには、サフィックスまたはプレフィックス ID を追加する必要がありますか?

4

1 に答える 1

3

Spring Session は、現時点ではスコーピング セッションをネイティブにサポートしていません。この追跡の詳細については、gh-166を参照してください。

Spring Session は、セッション ID に対して高レベルのエントロピーを持つ安全なランダム ID を生成するため、衝突が発生する可能性は非常に低くなります。

これは、次のステートメントに問題がない限り、Spring Session を使用して複数のアプリケーションに同じ Redis インスタンスを使用できることを意味します。

悪意のあるユーザーは、アプリケーション A のセッション ID をアプリケーション B で使用できます。なぜこれが重要なのですか? 次のシナリオを検討してください。

  • アプリケーション A は、すべてのユーザーがアカウントを作成できるパブリック アプリケーションです。
  • アプリケーション B は、招待されたユーザーのみがサインアップできる非公開アプリケーションです。
  • 悪意のあるユーザーがアカウントを作成し、アプリケーション A で認証します
  • ユーザーはアプリケーション A のセッション ID をコピーします。アプリケーション B に移動し、セッション ID をアプリケーション B の Cookie に貼り付けて、認証されます。

これはあなたにとって問題ではないかもしれません。たとえば、優れたセキュリティ プラクティスでは、アプリケーション B で ADMIN ロールを検索することにより、ユーザーが適切に承認されるようにします。

于 2015-08-10T16:12:21.500 に答える