apache2: требуется действительный пользователь и разрешить все
Я хочу разрешить базовую аутентификацию, но не требую ее. Все посетители, прошедшие проверку подлинности или нет, должны иметь доступ к странице (сценарию), где сценарий может добавлять специальные функции для действующих пользователей. Поэтому сначала попробуйте базовую аутентификацию, если это не удается, разрешите доступ в любом случае. Сценарий решит, что делать дальше. Я бы предпочел не выполнять полную аутентификацию внутри скрипта, но позволить apache выполнить аутентификацию и просто передать имя пользователя (если оно есть) скрипту.
Я на самом деле создаю SOAP-сервис, а не веб-сайт, но вы можете представить себе ситуацию, когда вы можете посетить домашнюю страницу сайта без запроса имени пользователя / пароля, а затем посетить страницу только для членов, которая вызывает http- аутентификация. Повторное посещение домашней страницы теперь может привести к персонализированной домашней странице.
Я возился с файлом.htaccess и получил это далеко:
AuthType Basic
AuthName "Beveiligde website"
AuthUserFile .htpasswd
require valid-user
Order allow,deny
Allow from All
satisfy any
Это позволяет все, но, к сожалению, сначала не пытайтесь выполнить аутентификацию (хотя бы не так, как я могу видеть). Переменная окружения AUTH_TYPE в PHP пуста, даже когда используются действительные учетные данные.
Возможно ли даже объединить их таким образом? Я мог бы представить, что apache пробует базовую аутентификацию только тогда, когда правила разрешения / отказа приводят к отказу. Есть ли способ принудительной базовой аутентификации? или я вообще ошибаюсь?
2 ответа
Вам нужно быть хитрым:) Чтобы заставить сервер запрашивать аутентификацию, вам понадобится действительный пользователь. Но это может пойти в блоке Location. Так что я думаю, что вы могли бы затем псевдоним (или перенаправить) это место в нормальное место. Я думаю, что-то вроде этого будет работать:
<location "/try-auth-first">
require valid-user
satisfy all
alias /try-auth-first /the-real-one
#redirect /try-auth-first /the/real/one
</location>
Возможно, вам придется немного поиграть, но что-то подобное должно сработать. Если аутентификация не удалась, ваш сценарий может получить результат 401 и затем повторить попытку непосредственно в реальное местоположение (которое должно быть настроено для разрешения от всех).
Заказ отрицать, разрешить это может быть решение.
Order deny,allow
Deny from all
Я не проверяю