Puncte:0

Autentificarea sub-solicitarii nginx nu funcționează conform așteptărilor

drapel ws

Vreau să adaug controale de acces la un întreg vhost pe un proxy invers. Folosesc autentificarea sub-solicitare nginx pentru a face acest lucru. Interacțiunea așteptată este ca utilizatorul fie să primească un mesaj de eroare cu un link către pagina de conectare, fie ca pagina de autentificare să fie redată la adresa URL solicitată. La finalizarea procesului de conectare, ar trebui să existe un mecanism pentru ca utilizatorul să navigheze/reîncarce adresa URL solicitată inițial. Nu există nicio capacitate de scriptare pe proxy-ul invers (adică fără PHP) în sine, ceea ce limitează opțiunile pentru capturarea și propagarea URL-ului original prin procesul de autentificare.

Așteptările mele: dacă cererea nu reușește autentificarea (de ex. http://authprovider.example.com:8081/gateway/index.php returnează un 401) Doresc ca un anumit conținut să fie returnat la adresa URL solicitată, fără redirecționare și cu o stare 4xx.

Server {
    asculta 80;
    nume_server www.example.com;
    rădăcină /var/www/html;

    error_page 401 iprestricted.html;
    ## Acesta oferă feedback utilizatorului atunci când cererea este interzisă
    ## (inclusiv un link pentru autentificare)
    # locație /iprestricted.html {
    # try_files $uri $uri/ =404;
    # }

    # Aceasta implementează verificarea sub-cererii....
    locație /restricționat {
            intern;
            proxy_pass http://authprovider.example.com:8081/gateway/index.php ;
            proxy_pass_request_body dezactivat;
            proxy_set_header Lungimea conținutului „”;
            proxy_set_header X-Real-IP $adresă_la distanță;
            proxy_set_header X-Original-URI $request_uri;
    }
    Locație / {
            auth_request /restricted;
            proxy_pass http://localwebserver/;
    }
}

In orice caz:

Dacă locație /iprestricted.html{...} este comentat, primesc o buclă de redirecționare la http://www.example.com

Dacă nu este comentată, atunci orice solicitare primește un răspuns 302 cu Locație /iprestricted.html care returnează un cod de stare 200

Cum se implementează autentificarea sub-cereri fără redirecționări?

Există o altă modalitate de a captura adresa URL inițială și de a propaga aceasta până la pasul de autentificare folosind doar configurația nginx?

Am încercat să adaug add_header WWW-Authenticate "Regiunea de bază=bipdevtest"; în fiecare și ambele locații de mai sus, dar acest lucru nu a fost trimis înapoi în răspunsurile HTTP.

Puncte:0
drapel ws

Întotdeauna o idee bună să RTFM

Nginx va transmite un antet WWW-Authenticate dacă este returnat de furnizorul auth_request (http://authprovider.example.com:8081/gateway/index.php în cele de mai sus).

Cu toate acestea, voi lăsa întrebarea deschisă, deoarece sunt confuz/îngrijorat de pagina de eroare personalizată care are ca rezultat o redirecționare 302 urmată de un răspuns 200.

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.