Сессии Rails и SiteMinder/SSO

Я интегрирую Rails с системой SSO моей компании. На моем сервере установлен и включен модуль SiteMinder Apache.

Приложение Rails проверяет объект запроса в фильтре before_filter, чтобы определить, прошел ли уже пользователь аутентификацию с помощью SSO. Найдя нужную переменную, мое приложение затем сопоставляет идентификатор пользователя, возвращенный из SSO, с учетной записью пользователя внутри себя и аутентифицирует этого пользователя (аутентификация покоя с хранилищем сеансов ActiveRecord).

Моя проблема заключается в следующем: после успешного входа в систему с использованием этого метода, после нескольких страниц, которые стоит щелкнуть, я внезапно теряю свою сессию Rails и в результате повторно аутентифицируюсь своим приложением (я возвращаюсь к домашнюю страницу).

Это не результат защиты CSRF, так как:

  1. Происходит как в тестовой, так и в производственной среде моего приложения (по умолчанию она отключена в тестовой среде), и
  2. Происходит, казалось бы, случайно, независимо от типа запроса: запросы AJAX, GET и POST привели к такому поведению.

Даже если я отключу код, который автоматически регистрирует пользователя на основе его идентификатора SSO, и просто перейду на старую страницу входа в свое приложение (после аутентификации с помощью SSO), я замечаю, что время от времени появляется новая появляется значение идентификатора сеанса в файле cookie моего браузера.

Таким образом, сеанс сбрасывается, когда у меня включен модуль Apache SSO. В противном случае все прекрасно и денди. Что дает?


person Matt Carter    schedule 21.03.2012    source источник


Ответы (2)


Сеансы Rails (как и почти любой сеанс веб-приложения) отслеживаются с помощью файлов cookie. Даже если вы используете хранилище сеансов AR, файл cookie с идентификатором сеанса по-прежнему сохраняется, и это единственный способ, с помощью которого веб-приложение может отслеживать сеансы. Если браузер потеряет или удалит свои файлы cookie, он потеряет сеанс.

В качестве альтернативы, если у вас есть код Rails, который вызывает метод контроллера #reset_session. Или можно было бы изменить хэш #cookies самостоятельно, чтобы удалить файлы cookie, идентифицирующие сеанс (но вы никогда этого не захотите).

Из предоставленной вами информации я не могу сказать, что вызывает потерю сеанса. Но это то, с чего нужно начать искать. Если вы можете воспроизвести проблему, взгляните на свои файлы cookie до и после того, как сеанс будет «потерян». Вы можете просматривать файлы cookie в своем браузере, используя его собственный интерфейс, или в приложении rails (используя отладчик или даже вывод на страницу для отладки) из хеша, возвращаемого методом #cookies в контроллере или представлении. Когда/как/почему они меняются?

Похоже, вы подозреваете, что модуль SSO удаляет ваши файлы cookie, связанные с rails. Это может быть вопрос к поддержке SiteMinder, а не проблема Rails.

person jrochkind    schedule 22.03.2012
comment
Я отслеживал содержимое моего файла cookie сеанса Rails в Firefox, неоднократно открывая страницу. Содержимое файла cookie действительно изменилось, поэтому на данный момент мне интересно, что заставляет Rails решить сбросить файл cookie. Другой исходный IP? Если запрос выглядит подделанным (хотя я не думаю, что модуль SSO подделывает содержимое моего файла cookie сеанса Rails)? Спасибо за предложение. Я задал этот вопрос людям SiteMinder и, ну, без костей. - person Matt Carter; 29.03.2012

Попробуйте добавить POST, PUT, GET, DELETE и т. д. в siteminder.

person sphinks    schedule 19.06.2013