У меня есть Apache 2.2 (за балансировщиком нагрузки) с дополнительным сторонним модулем (веб-агент OpenAM), который загружается с помощью директивы LoadModule. Этот модуль проверяет каждый запрос, разрешен он или нет. Вся установка работает, и в журнале стороннего модуля я вижу, что проверки выполняются соответственно для каждого запроса, найденного в журнале доступа apache.
Ситуация изменится, если я активирую базовую аутентификацию, поместив следующие директивы в часть VirtualHost конфигурации Apache:
<Directory /path/to/docroot>
Options -MultiViews
AllowOverride All
Order deny,allow
Deny from all
Allow from 10.0.0.0/8
Allow from <other ips>
AuthType Basic
AuthBasicProvider file
AuthName "AuthZone"
AuthUserFile /path/to/htpasswd
Require valid-user
Satisfy Any
</Directory>
Теперь базовая авторизация работает, но не проверки сторонним модулем. Похоже, что каждый запрос, который подвергался базовой обработке аутентификации, не попадал в сторонний модуль. В журналах последнего я могу видеть только запросы, соответствующие параметру «Разрешить» и, следовательно, не прошедшие базовую обработку аутентификации.
Я вижу все запросы в журнале доступа, и я вижу, что Apache отвечает кодом 200 на «отсутствующие» запросы.
В чем может быть причина этого? Журнал ошибок не содержит никакой полезной информации.
Хотя я не могу точно сказать о стороннем модуле и о том, как он подключается к потоку авторизации, я готов поспорить, что причина в Satisfy Any
.
Это позволяет пропустить остальные шаги авторизации, когда один из методов авторизации совпадает - это похоже на то, что вы видите.