Сочетание пирамиды с карнизом и базовой аутентификацией делает проверку пароля дважды, как это предотвратить?

В настоящее время я работаю над проектом, который объединяет базовую аутентификацию с карнизом / структурой пирамиды.

Из журнала я наблюдаю, что каждый раз при обращении к URL используемые учетные данные проверяются дважды. Поскольку в нашем случае это требует много проверок базы данных, это потенциальная цель для (непреднамеренной) DoS-атаки.

На мой взгляд, я определяю карнизную службу с фабрикой. В моей настройке приложения я настроил пирамиду, предоставленную BasicAuthenticationPolicy, с ресурсоемкой проверкой в ​​качестве обратного вызова для аутентификации. Также в настройке приложения я настроил пирамиду, предоставленную ACLAuthorizationPolicy для авторизации.

Поэтому мне было интересно, чего мне не хватает, так как я действительно хотел бы предотвратить повторную проверку. (Должен ли я кешировать это на объекте запроса каким-то безопасным способом?)

1 ответ

Решение

Обнаруженный путем изучения кода, это предполагаемое поведение.

Такое поведение срабатывает только при использовании свойства authenticated_userid (что я и делаю).

Решил эту проблему путем "кеширования" вызовов моей функции аутентификации через декоратор. Что должно быть хорошо, так как на те же объекты будут ссылаться через параметры функции.

Документация может быть найдена в пакете пирамиды pyramid/authentication.py

Другие вопросы по тегам