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

HTTP Basic Auth, если не подключаетесь из офиса с Apache 2.4?

Мы хотим создать веб-сайт только для демонстрационных целей, чтобы мы могли:

  1. Доступ из любого места из Интернета путем ввода имени пользователя и пароля через HTTP Basic Auth.
  2. Для простоты использования мы не хотим, чтобы вам приходилось проходить через HTTP Basic Auth из офиса, к которому наш офис будет подключаться с 202.161.24.210.
  3. Некоторым частям демонстрационного сайта потребуется отправлять запросы REST к самому себе, поэтому мы также хотим внести в белый список 127.0.0.1 и :: 1.

Кажется, мы достигли 2 и 3, но 1 не работает так хорошо, как мы думали, наши пользователи продолжали получать повторные запросы для имени пользователя и пароля HTTP Basic Auth, даже если они уже аутентифицированы и переходят на разные страницы веб-сайт. Мы заметили из журналов, что они получают следующее сообщение об ошибке при доступе к определенным ресурсам:

[Tue Jun 09 10:50:03.442834 2015] [access_compat:error] [pid 5740:tid 140705259312896] [client 78.52.242.163:62774] AH01797: client denied by server configuration: /var/www/docroots/stage/lib/yui/build/moodle-core-checknet/assets/checknet.txt, referer: http://stage.example.org/mod/scorm/player.php

Вот наш хост Apache:

<VirtualHost *:80>
ServerName stage.example.org

DocumentRoot /var/www/docroots/stage
    <Directory /var/www/docroots/stage>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None

        # Only visible on Office network or anyone with a valid password.
        AuthType Basic
        AuthName "Authorisation Required"
        AuthUserFile "/var/www/htpasswd"
        Require valid-user
        Order allow,deny
        Allow from 202.161.24.210 127 ::1
        Satisfy any
    </Directory>
</VirtualHost>

Мы запускаем Apache 2.4.6 на CentOS 7. Правильна ли наша конфигурация? Похоже, наша конфигурация действительно работает для файлов верхнего уровня на /var/www/docroots/stage а также другие изображения, файлы css и javascript в подкаталогах, которые находятся непосредственно под ним, но может ли случиться так, что он забывает HTTP-аутентификацию после определенного количества подкаталогов? SELinux находится в разрешающем режиме.

Без полного сообщения об ошибке (я бы ожидал, что модуль и IP-адрес) это немного предположение, но вы смешиваете директивы из двух разных модулей в Apache 2.4, Require директива из mod-authz-core и "наследие" директивы Allow и Order из mod-access-compat, что может не очень хорошо складываться.

Вы можете попробовать заменить строки

Order allow,deny
Allow from 202.161.24.210 127 ::1

Со следующими

Require ip  202.161.24.210 127 ::1/128

С уже присутствующим Satisfy any это должно соответствовать вашим требованиям.

Ваше третье требование:

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

Возможно, доступ к серверу не осуществляется с адреса обратной связи, как вы ожидали, но он может быть настроен с полным доменным именем, аналогичным http://api.example.com/rest? и исходят от публичного IP-адреса сервера.

Вы можете добавить общедоступные IP-адреса сервера, но это намного легче решить в Apache 2.4; то местный провайдер разрешает доступ к серверу, если выполняется одно из следующих условий:

  • адрес клиента совпадает с 127.0.0.0/8
  • адрес клиента: 1
  • обе адрес клиента и сервера соединения совпадают

Поэтому вместо перечисления обратных IP-адресов используйте:

Require valid-user
#  Office Gateway:
Require ip 202.161.24.210 
#  API access from this host:   
Require local            
#  Only one or more of the above needs to match:
Satisfy any