Рейтинг:0

Apache mod_auth_form отправляет POST на перехваченный запрос обратного прокси

флаг us

Из документации:

Когда конечный пользователь введет свои данные для входа, форма отправит HTTP-запрос POST на исходный защищенный паролем URL-адрес. mod_auth_form перехватит этот POST-запрос, и если для имени пользователя и пароля будут обнаружены поля HTML, пользователь войдет в систему, и исходный защищенный паролем URL-адрес будет возвращен пользователю в виде запроса GET.

у меня работа в порту 45001 и обратное проксирование Apache. Я использую аутентификацию формы и ErrorDocument для принудительного входа в систему. Это моя конфигурация:

<VirtualHost myip:44302>
    ServerName myserver.com

    # Pass auth info
    RequestHeader set X-Remote-User %{REMOTE_USER}s

    # Login page is directly on the server - don't use reverse proxy
    ProxyPass /login/ !

    # Proxy all requests to the app running in a docker container
    ProxyPreserveHost On
    ProxyPass / http://localhost:45001/
    ProxyPassReverse / http://localhost:45001/

    # Require auth for all requests except the login page
    <LocationMatch ^/(?!login).*$>
        AuthType form
        AuthName "login"

        AuthFormProvider ldap
        AuthLDAPURL <url>
        AuthLDAPBindAuthoritative off

        # Redirecting to login page if auth is needed
        ErrorDocument 401 /login/index.html

        # If authorization fails, return 403 insead of 401
        AuthzSendForbiddenOnFailure On

        # Use session cookie
        Session On
        SessionCookieName session path=/;httponly;
        SessionCryptoPassphrase <passphrase>

        Require valid-user
    </LocationMatch>
</VirtualHost>

Форма (упрощенная из классов и оболочек div):

<form action="" method="POST">
    <input name="httpd_username" type="text">

    <input name="httpd_password" type="password">

    <button type="submit">
        Login
    </button>
</form>

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

  1. URL доступа
  2. проверить файл cookie сеанса
    1. запросить логин, если нужно
    2. Отправить HTTP ПОЛУЧИТЬ запрос к исходному перехваченному URL

Но когда я использую обратный прокси, вместо отправки HTTP ПОЛУЧИТЬ на перехваченный запрос apache отправляет HTTP-ПОСТ. Приложение за прокси не работает с ПУБЛИКОВАТЬ и печатает ошибку.

Если пользователь обновляет страницу, все работает правильно, потому что файл cookie сеанса уже установлен.

Что вызывает это неправильное поведение и/или как правильно настроить эту аутентификацию для работы?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.