0

Spring-Securityを介してCASサーバーとクライアントを構成しています。これまでのところ、シングルサインオンとシングルログアウトは正常に機能しています。

私はまだセッションタイムアウトの問題に直面しています。私が理解しているように、チケットの有効期限ポリシーは、セキュリティで保護されたCASクライアント側セッションのアイドル状態の影響を受けません。したがって、クライアントは、チケットが期限切れであり、単一のログアウトが実行される場合のようにCASサーバーによって期限切れイベントが通知されていないかどうかを確認するために、チケットをアクティブに再検証する必要があります。

Springで保護されたクライアントにチケットの有効期限を定期的にチェックさせるために、セッションタイムアウトを1分程度の低い値に設定する場合があります。ただし、これには、すべてのセッションデータが削除されるという欠点があります。あまりユーザーフレンドリーではありません。

最初にユーザーセッションを破棄せずにチケットがまだ有効かどうかを定期的にチェックするようにspring-securityに指示する方法はありますか?

4

4 に答える 4

2

そのような方法はないと思います。SpringSecurityとSpringSecurityCasは、サーブレットAPIフィルター/リスナーのセットとして実装されます。したがって、Spring Security Casは、一部のHttpリクエスト/セッションイベント処理中にのみ機能します。spring-security-cas.jarのスケジューリングライブラリへの依存関係は表示されません。

于 2012-12-13T13:19:43.993 に答える
2

ローカルログアウトを強制するための単純なチェックであるため、Javascriptソリューションにはかなり自信があります。ただし、CASサーバーをカスタマイズする必要がありますが、それはできません。

アプリケーション側でセッションを短くして定期的な再認証を強制するという解決策がありますが、これは、アプリケーションセッションを頻繁に無効にして、再作成することを意味します。

より良い解決策は、CASプロトコルのパラメーターに基づくことができますgateway。SSO認証を受けていない場合、このパラメーターを使用してもサービスチケットは生成されません。だからあなたは持つことができます:

  1. 5分ごとに現在のURLを保存し、gateway =trueおよび特定のサービスでCASラウンドトリップをトリガーするアプリケーションフィルター:http://myserver/myapp/checkCasSession
  2. 特定のURL:/ checkCasSession:サービスチケットを受け取った場合、すべてが正常であり、CASセッションは引き続き有効であり、元のURLを復元するだけです。サービスチケットがない場合は、ローカルセッションを終了し、ローカルログアウトをトリガーする必要があります。
于 2012-12-16T19:01:08.880 に答える
1

SpringSecurityですぐに対処できるのは簡単な問題ではありません。クライアントとサーバーの両方で作業する必要があります。私は...するだろう :

  1. CASTGCの有効期限が切れているかどうかを示すJSONを返すコントローラーをCASサーバー側に作成します
  2. たとえば、5分ごと、およびアプリケーションページが表示されるたびに、この特定のCASコントローラーを呼び出すJavaScriptを追加し、CASセッションが終了した場合は、アプリケーションセッションも終了します。

CASセッションはCASTGCCookieによって保持されるため、フロントチャネルからCASサーバーを呼び出す必要があります。

于 2012-12-14T17:12:45.620 に答える
0

2つのセッションがあります。1つはアイドルタイムアウトのあるアプリケーションで、もう1つはアイドル/ハードタイムアウトのあるCASです。CASログインを介してアプリケーションにアクセスした後、アプリケーションセッションはそれ自体で存続し、CASセッションよりも長く続く可能性があります。通常は問題ありません。どのようなユースケースを処理しますか?

于 2012-12-14T08:42:26.717 に答える