Совместное использование cookie-файлов сеанса разработки между двумя приложениями Rails разных версий

#ruby-on-rails #ruby #devise

#ruby-on-rails #ruby #разработка

Вопрос:

Я пытаюсь поделиться файлом cookie сеанса разработки для целей аутентификации между двумя приложениями Rails в одном TLD, но находящимися на разных поддоменах. Одно приложение — v4.2.11.1, а другое — v6.0.3.2. Я хочу войти в приложение Rails 4 и получить доступ к информации об аутентифицированном пользователе в приложении Rails 6. Файл cookie сеанса устанавливается нормально при входе в приложение Rails 4, но, похоже, он полностью стирается / сбрасывается при попытке получить к нему доступ в приложении Rails 6.

  • Домен cookie-файлов хранилища сеансов установлен правильно для обоих приложений, например .example.com .
  • В обоих приложениях для хранилища сеансов tld_length установлено значение 2 .
  • В обоих приложениях для сериализатора файлов cookie установлено значение :marshal .
  • Я использую одно и то же secret_key_base в обоих приложениях. В приложении Rails 4 он устанавливается через ENV['SECRET_KEY_BASE'] переменную env. В приложении Rails 6 он устанавливается с помощью учетных данных Rails, например config/credentials/<env>.yml.enc .
  • Devise.secret_key одинаково в обоих приложениях.
  • Я использую одну и ту же версию Devise gem и инициализаторы в обоих приложениях.

Ответ №1:

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

  1. В Rails 5.2 было внесено изменение для встраивания информации об истечении срока действия в зашифрованные файлы cookie. Из руководства по обновлению:

Для повышения безопасности Rails теперь встраивает информацию об истечении срока действия также в зашифрованное или подписанное значение cookie-файлов.

Эта новая информация о внедрении делает эти файлы cookie несовместимыми с версиями Rails старше 5.2.

Если вам требуется, чтобы ваши файлы cookie считывались в версии 5.1 и старше, или вы все еще проверяете свое развертывание 5.2 и хотите разрешить вам откат, установленный Rails.application.config.action_dispatch.use_authenticated_cookie_encryption на false .

  1. В Rails 6.0 внесены изменения для встраивания цели в зашифрованные файлы cookie. Из руководства по обновлению:

Для повышения безопасности Rails встраивает информацию о назначении в зашифрованное или подписанное значение cookie-файлов. Затем Rails может предотвратить атаки, которые пытаются скопировать подписанное / зашифрованное значение файла cookie и использовать его в качестве значения другого файла cookie.

Эта новая информация о внедрении делает эти файлы cookie несовместимыми с версиями Rails старше 6.0.

Если вам требуется, чтобы ваши файлы cookie считывались Rails 5.2 и старше, или вы все еще проверяете свое развертывание 6.0 и хотите иметь возможность отката, установленного Rails.application.config.action_dispatch.use_cookies_with_metadata на false .