Назад | Перейти на главную страницу

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 пытается использовать только базовую аутентификацию, когда правила разрешения / запрета приводят к отказу. В любом случае есть способ принудительно выполнить базовую аутентификацию? или я вообще ошибаюсь?

Вам придется потрудиться :) Чтобы сервер просить для аутентификации вам потребуется действующий пользователь. Но это могло быть внутри Расположение блок. Итак, я думаю, вы могли бы затем указать псевдоним (или перенаправить) это место в обычное место. Думаю, что-то вроде этого сработает:

<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

Я не проверяю.