1

Spring Security がシングル サインアウトを処理する方法を理解しようとしています。複数の Grails アプリで CAS サーバーを使用しています。これが私のシナリオです:

アプリ #1 & ログイン

  1. ユーザーが Grails アプリ #1 に移動します。
  2. アプリ #1 にはユーザーの認証データがなく、CAS サーバーをチェックします。CAS サーバーにはユーザーの Cookie データがないため、CAS はユーザーにログインを求めます。
  3. ユーザーが CAS にログインし、有効なチケットを取得します。ユーザーはステップ 1 からアプリ #1 の URL にリダイレクトされます。
  4. 認証後の最初のリクエストで、アプリ #1 は CAS チケットを SecurityContextHolder に読み込みます。後続のリクエストでは、チケット データを使用して、ユーザーが認証されていることを確認します。

アプリ #2 & ログアウト

  1. ユーザーは Grails アプリ #2 に移動します。
  2. アプリ #2 にはユーザーの認証データがなく、CAS サーバーをチェックします。CAS サーバーにはユーザーの Cookie データがあり、このデータを使用してユーザーを認証します。
  3. 認証後の最初のリクエストで、アプリ #2 は CAS チケットを SecurityContextHolder に読み込みます。後続のリクエストでは、チケット データを使用して、ユーザーが認証されていることを確認します。

ログアウト

  1. ユーザーは、アプリ #2 のログアウト ページにアクセスして、アプリ #2 からログアウトします。アプリ #2 では、SecurityContextHolder にユーザー データが保存されなくなりました。
  2. ユーザーは CAS サーバーのログアウト ページにリダイレクトされます。CAS には、ユーザーの有効なチケットがありません。
  3. アプリ #2 への後続の (保護された) 要求は、ユーザーを CAS ログイン ページにリダイレクトします。
  4. アプリ #1 の SecurityContextHolder にはまだ CAS チケット データがあるため、アプリ #1 への後続の (保護された) 要求は、ユーザーをログインにリダイレクトしません。コンテキストをクリアするか、何らかの方法で期限切れにする必要があります。

ユーザーがアプリ #1 の保護された URL にアクセスできないようにするにはどうすればよいですか? SecurityContextHolder に設定できる有効期限はありますか?

4

0 に答える 0