Я использую Devise для обработки аутентификации в своих приложениях Rails, но так и не понял, как это работает. Поскольку Devise также использует конфигурацию хранилища сеансов, установленную в Rails, я предполагаю, что это вопрос о сеансовой обработке с Rails.Как работают сеансы и файлы cookie в Rails?
В принципе, я новичок в режиме auth. Я прочитал несколько статей об аутентификации, но большинство из них посвящено абстрактным библиотекам (они говорят о машинах, промежуточных продуктах и т. Д.), Которые не имеют для меня большого смысла. Я действительно ищу детали более низкого уровня.
Вот что я знаю, до сих пор ..
Я знаю о печенье и сессий. Файлы cookie представляют собой строки, хранящиеся на стороне клиента, которые используются для поддержки сеанса по нескольким HTTP-запросам.
Вот мое основное понимание аутентификации (пожалуйста, поправьте меня, если я ошибаюсь):
Когда пользователь входит в систему, мы посылаем SSL зашифрованный запрос на сервер. Если учетные данные действительны, мы сохраняем случайную строку, называемую идентификатором сеанса, в базе данных (или любом другом хранилище данных) в качестве действительного идентификатора сеанса, связанного с идентификатором пользователя. Этот идентификатор сеанса изменяется для каждого входа/выхода пользователя.
После сохранения этого идентификатора сеанса в нашем хранилище данных мы возвращаем ответ, который просит браузер установить cookie с идентификатором сеанса. Этот идентификатор сеанса вместе с идентификатором пользователя затем будет отправлен для последующего запроса в домен до истечения срока его действия. Для каждого запроса наш сервер проверяет идентификатор сеанса в заголовках и проверяет, является ли этот идентификатор сеанса действительным для этого идентификатора пользователя. Если это так, подумайте, что пользователь аутентифицирован.
Вот мои вопросы:
Я прочитал, что по умолчанию, начиная с Rails 2, теперь он использует CookieStore (вместо SessionStore), который генерирует сессии хэши с SHA512 (вместо идентификаторов сеансов), и все это сохраняется в файле cookie, что означает, что несколько идентификаторов пользователя могут иметь один и тот же сеансовый хеш, и он будет работать нормально. Мне кажется, что это очень опасная вещь, подвергая большое количество хэшей одним секретным ключом, хранящимся на сервере, и основывая всю вашу систему аутентификации на основе этого ключа. Существует ли приложение реального масштаба для больших масштабов, которое использует хеширование вместо хранения идентификаторов сеанса на стороне сервера?
Что касается хранения активного идентификатора сеанса на стороне сервера, я также прочитал, что вы можете переключиться на использование разных видов хранилища сеансов для Rails. Исходя из этого, я слышал о системах, которые перешли системы аутентификации в качестве сервисов и вместо них использовали токены auth. Что такое токен аутентификации и как он отличается от идентификатора сеанса?
Похоже, я могу просто угадать случайную строку (как для хэширования, так и для сеансов на стороне сервера), чтобы захватить существующий сеанс. Есть ли способ защитить от этого? Нормально ли использовать больше значений, хранящихся в файле cookie? (Например, имя пользователя, реальное имя или даже другой хэш для аутентификации)
Я знаю, что я прошу много, но я считаю, что это будет полезно для людей вроде меня, которые не понимают аутентификации и будут очень полезно получить прочную основу по теме.
Это очень хороший вопрос, и неизвестность Devise уже давно является препятствием для принятия в нашей компании. Будете внимательно следить за этим. – Drenmi
Созданный хэш не просто состоит из атрибутов пользователя, зарегистрированных в журнале. i.ei. вы не можете создать повторяющийся хэш SHA1. –