#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 сеанса, на которые вам нужно будет взглянуть.
- В 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
.
- В 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
.