CAS и Spring-Security: регулярно проверять, истек ли срок действия билета

У меня есть CAS-сервер и клиент, настроенный через Spring-Security. До сих пор единый вход и единый выход работают нормально.

Я все еще сталкиваюсь с проблемой с тайм-аутом сессии. Насколько я понимаю, на политику истечения срока действия билетов не влияет бездействие защищенного сеанса на стороне клиента CAS. Таким образом, клиент должен активно повторно проверить заявку, чтобы увидеть, истек ли срок ее действия и не публикуется ли событие истечения срока действия сервером CAS, как в случае, когда выполняется один выход из системы.

Чтобы заставить моего весеннего обеспеченного клиента регулярно проверять срок действия билета, я мог бы установить для тайм-аута сеанса низкое значение, например, около минуты. Но у этого есть недостаток всех моих данных сеанса, которые будут удалены. Не очень удобный для пользователя.

Есть ли способ сообщить Spring-Security, чтобы он регулярно проверял, действителен ли билет, не разрушая сначала пользовательский сеанс?

4 ответа

Решение

Я был бы довольно уверен в решении Javascript, так как это всего лишь простая проверка для принудительного выхода из системы. Тем не менее, он должен настроить ваш сервер CAS, что вы не можете сделать.

У вас есть решение иметь более короткий сеанс на стороне приложения для принудительной повторной аутентификации, но это означает, что вы будете часто аннулировать сеанс приложения и заново создавать его.

Лучшее решение может быть основано на gateway параметр протокола CAS: использование этого параметра не приведет к выдаче билета на обслуживание, если вы не прошли аутентификацию SSO. Таким образом, вы могли бы иметь:

  1. фильтр приложения, который каждые 5 минут сохраняет текущий URL-адрес, запускает обход CAS с gateway=true и конкретной службой: http://myserver/myapp/checkCasSession
  2. определенный URL: /checkCasSession: если он получает билет службы, все в порядке, сеанс CAS все еще действителен, он просто восстанавливает исходный URL. Если служебного билета нет, локальный сеанс должен завершиться, и будет запущен локальный выход из системы.

Я думаю, что нет такого пути. Spring Security и Spring Security Cas реализованы как набор фильтров / прослушивателей API сервлетов. Таким образом, Spring Security Cas работает только во время обработки некоторых запросов Http / Session. Я не вижу никакой зависимости от какой-либо библиотеки планирования для spring-security-cas.jar.

Это не простая проблема, которую вы можете решить с помощью Spring Security. Вам нужно работать с обеих сторон: клиент и сервер. Я мог бы:

  1. создать контроллер на стороне сервера CAS, который возвращает JSON, указывающий, истек ли срок действия CASTGC или нет
  2. каждые 5 минут (например) и каждый раз, когда отображается страница приложения, добавьте некоторый javascript для вызова этого конкретного контроллера CAS и, если сеанс CAS завершился, завершится также сеанс приложения.

Вам необходимо вызвать сервер CAS из переднего канала, поскольку сеанс CAS поддерживается файлом cookie CASTGC.

У вас есть два сеанса: одно приложение с тайм-аутом простоя и одно CAS с тайм-аутами бездействия / жесткого. После получения доступа к приложению через вход в систему CAS сеанс приложения живет сам по себе и может длиться дольше, чем сеанс CAS. Это вообще не проблема. Какой вариант использования вы хотите обработать?

Другие вопросы по тегам