0

私は 2 つの osgi 分散 Web アプリ A(A1、A2) と B(B1、B2) を持っています。shiro を使用してシングル サインオンの http セッションを共有し、一方のシステムにログインするともう一方のシステムにもログインできるようにしています。しかし、認証・認可データとは別にセッションデータをシステムAとBで分けたいので、認証データを共有し、AとBのシステム固有のセッションデータを分ける方法が必要です。シングル サインオンし、システムごとに異なる分散セッションを使用してシステム固有のデータを保存する場合、主なワークフローは次のようになります。

  1. shiro でシステム A にログインし、shiro セッション ID を使用して別のセッション (またはセッション データを保存するためのデータ ホルダー オブジェクト) を作成し、それをバックエンド (db またはキャッシュ) に保存します。
  2. システムAで何かを行い、セッションデータを上で作成したセッションに入れ、バックエンドに書き込みます。
  3. 別のリクエストがシステム A に届いたら、shiro セッション ID と一致する ID を持つセッションを探し、見つかった場合はそれを使用し、そうでない場合は新しいセッションを作成します。

それは理にかなっていますか?それは私の問題を解決する正しい方法ですか?最善の方法は何ですか?あなたの考えを共有してください。どんな入力でも大歓迎です。ありがとうございました。

4

1 に答える 1

0

私はサーブレットフィルターでそのようなことをしました。私の HtppSession には認証 ID が含まれており、それを検索してリクエストのセキュリティ コンテキストとして提供します。セキュリティ ID が存在しない場合、クライアントはログインを強制されます。明らかに、セキュリティ コンテキストは分散メカニズムで保持できるため、クラスタ内のすべてのシステムから利用できます。

クライアントとシステムの間で https を使用していることを確認してください。そうしないと、誰かが傍受し、ID で Cookie を読み取り、被害者の承認を得てシステムの 1 つにログインできます。つまり、セッションハイジャックです。

于 2013-02-08T16:43:02.810 に答える