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

Я не проверяю

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