Puncte:0

Apache mod_auth_form trimite POST la cererea interceptată de proxy invers

drapel us

Din documentatie:

Când utilizatorul final și-a completat detaliile de conectare, formularul va face o solicitare HTTP POST către adresa URL inițială protejată prin parolă. mod_auth_form va intercepta această solicitare POST, iar dacă sunt găsite câmpuri HTML prezente pentru numele de utilizator și parolă, utilizatorul va fi conectat, iar URL-ul original protejat prin parolă va fi returnat utilizatorului ca cerere GET.

Am o alergare la port 45001 și apache reverse-proxing la acesta. Folosesc autentificarea prin formulare și ErrorDocument pentru a impune autentificarea. Aceasta este configurația mea:

<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>

Formular (simplificat de clase și div wrapper):

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

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

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

Pentru alte scenarii, în care nu folosesc proxy invers, fluxul de lucru este corect:

  1. URL de acces
  2. verificați cookie-ul de sesiune
    1. solicitați autentificare dacă este necesar
    2. trimite HTTP GET cerere către adresa URL interceptată inițială

Dar când folosesc reverse-proxy, în loc să trimit HTTP GET la cererea interceptată, apache trimite HTTP POST. Aplicația din spatele proxy-ului nu funcționează POST și imprimă o eroare.

Dacă utilizatorul reîmprospătează pagina, totul funcționează corect deoarece cookie-ul de sesiune este deja setat.

Ce cauzează acest comportament greșit și/sau cum configurez corect această autentificare să funcționeze?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.