При использовании SignedCookieSessionFactory
в документации указывается, что используется алгоритм дайджеста sha512 HMAC.В результате этого после сериализации данных сеанса они подписываются и отправляются клиенту пользователя в файле cookie session
.
В документации Pyramid не упоминается, что сеансы также кэшируются на стороне сервера (в соответствии с этим SessionFactory).
Это представляет противоречие и также приводит к путанице в аутентификации при соединении с SessionAuthenticationPolicy
.Если данные сеанса не могут быть извлечены из файла cookie клиента session
(поскольку он односторонне хешируется), как получается, что возможно следующее?
Аутентификация с приложением так, чточтение Request.authenticated_userid
не возвращает None.
Скопируйте файл cookie session
в буфер обмена.
Выйдите из системы, открыв окнов ответе возвращаются заголовки из forget(request)
.
Замените файл cookie session
на скопированное значение.
Теперь пользовательснова вошел в систему.
Я понимаю, что простого удаления клиентской стороны cookie недостаточно для полной аннулирования сеанса (без внесения в черный список), но тогда возникают следующие вопросы:
Как можно обеспечить безопасность сеансов в области браузера, если только каждый файл cookie сеанса, который недавно был выдан пользователю, каким-либо образом запоминается и помещается в черный / недействительный список?
session
cookie на самом деле идентификатор ключа / сеанса, который используется для поиска сеанса в памяти?Поскольку это односторонняя подпись, конечно, это единственное объяснение?
Можно ли затем аннулировать сеансы на стороне сервера, чуть более надежные, чем просто шаблон headers=forget(request)
?
В конечном счете, я полагаю, что ответ заключается в следующем: «Поддерживать сеансы на стороне сервера с использованием включения, такого как pyramid_redis_sessions
»
Любое объяснение будет приветствоваться.