Rails Sessions и SiteMinder / SSO - PullRequest
       36

Rails Sessions и SiteMinder / SSO

2 голосов
/ 21 марта 2012

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 19 июня 2013

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

0 голосов
/ 22 марта 2012

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

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

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

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

...