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

Apache 2.4 аутентифицирует анонимных пользователей, но разрешает другим по IP

Я пытаюсь настроить Apache, чтобы разрешить пользователям с выбранными IP-адресами доступ к приложению Flask без аутентификации, но для запроса учетных данных любых других пользователей.

Сейчас у меня следующая конфигурация:

<directory /var/www/flaskapp>
    WSGIProcessGroup flaskapp
    WSGIApplicationGroup %{GLOBAL}
    WSGIScriptReloading On
    WSGIPassAuthorization On
    Order deny,allow
    AuthType Basic
    AuthName "Restricted area - authorised users only"
    AuthUserFile "/usr/local/apache/passwd"
    <RequireAll>
        <RequireAny>
            Require ip 1.1.1.1
         </RequireAny>
        Require valid-user
    </RequireAll>
</directory>

Это не работает, а вместо этого предлагает всем пользователям пройти аутентификацию.

Я должен упомянуть, что использовал htpasswd для создания пользовательского файла в расположении /usr/local/apache/passwd как указано в конфиге.

Вам нужен только RequireAny состояние:

<RequireAny> и </RequireAny> используются для включения группы директив авторизации, одна из которых должна быть успешной, чтобы директива <RequireAny> была успешной.

<RequireAny>
    Require ip 1.1.1.1
    Require valid-user
</RequireAny>

Поскольку вы используете Apache 2.4, вы можете использовать выражения. В вашем случае это будет:

<If "%{REMOTE_ADDR} != '127.0.0.1'">
  AuthType Basic
  AuthName "Restricted area - authorised users only"
  AuthUserFile usr/local/apache/passwd
  require valid-user
</If>

Также поддерживается нотация CIDR. Например.:

<If "%{REMOTE_ADDR} != '192.168.0.0/24'">
  AuthType Basic
  AuthName "Restricted area - authorised users only"
  AuthUserFile usr/local/apache/passwd
  require valid-user
</If>