Сочетание пирамиды с карнизом и базовой аутентификацией делает проверку пароля дважды, как это предотвратить?
В настоящее время я работаю над проектом, который объединяет базовую аутентификацию с карнизом / структурой пирамиды.
Из журнала я наблюдаю, что каждый раз при обращении к URL используемые учетные данные проверяются дважды. Поскольку в нашем случае это требует много проверок базы данных, это потенциальная цель для (непреднамеренной) DoS-атаки.
На мой взгляд, я определяю карнизную службу с фабрикой. В моей настройке приложения я настроил пирамиду, предоставленную BasicAuthenticationPolicy, с ресурсоемкой проверкой в качестве обратного вызова для аутентификации. Также в настройке приложения я настроил пирамиду, предоставленную ACLAuthorizationPolicy для авторизации.
Поэтому мне было интересно, чего мне не хватает, так как я действительно хотел бы предотвратить повторную проверку. (Должен ли я кешировать это на объекте запроса каким-то безопасным способом?)
1 ответ
Обнаруженный путем изучения кода, это предполагаемое поведение.
Такое поведение срабатывает только при использовании свойства authenticated_userid (что я и делаю).
Решил эту проблему путем "кеширования" вызовов моей функции аутентификации через декоратор. Что должно быть хорошо, так как на те же объекты будут ссылаться через параметры функции.
Документация может быть найдена в пакете пирамиды pyramid/authentication.py