Frage Wie benutze ich nginx um sich an einen Host zu authentifizieren, der eine Authentifizierung benötigt?


Wie kann ich eine nginx proxy_pass-Anweisung einrichten, die auch HTTP-Standardauthentifizierungsinformationen enthält, die an den Proxy-Host gesendet werden?

Dies ist ein Beispiel für die URL, für die ich Proxy verwenden muss:

http://username:password@192.168.0.5/export?uuid=1234567890

Das Endziel besteht darin, 1 Server vorhandene Dateien von einem anderen Server (dem Proxyserver) zuzulassen, ohne den URI des Proxyservers freizugeben. Ich habe das funktioniert 90% korrekt jetzt von der Nginx Config hier gefunden:

http://kovyrin.net/2010/07/24/nginx-fu-x-accel-redirect-remote/

Ich muss nur die HTTP Basic-Authentifizierung hinzufügen, um sie an den Proxy-Server zu senden


40
2018-02-03 17:53


Ursprung


@all: Stellen Sie sicher, dass Sie HTTP Basic-Authentifizierung benötigen, wenn Sie diese Lösung verwenden - nicht HTTP Digest Authentication;) Hatte eine ziemlich harte Zeit Debugging um, bis ich es herausgefunden habe ... stackoverflow.com/questions/9534602/ ... - SimonSimCity


Antworten:


Ich habe vor einiger Zeit darüber geschrieben. Siehe die Details hier:

http://shairosenfeld.blogspot.com/2011/03/authorisation-header-in-nginx-for.html

Zum Beispiel:

 location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://6.6.6.6:80;
    proxy_set_header Authorization "Basic a2luZzppc25ha2Vk";
 }

"a2luZzppc25ha2Vk" ist "king: isnaked" base64-kodiert, also würde das funktionieren

http: // König: isnaked@6.6.6.6

Fühlen Sie sich frei, Blog-Post für weitere Details zu überprüfen.


50
2017-12-30 07:31



Die Verbindung ist unterbrochen - Alex
Link ist jetzt hier: shairosenfeld.blogspot.com/search?q=nginx falls jemand sich fragt - ckm
Ich brauche etwas Schwierigeres - Ilja
Ihre Lösung ist nicht flexibel genug. Es könnte sehr nützlich sein, den Benutzernamen "password on the fly" zu verschlüsseln. Erstens muss nginx den Benutzernamen "password" von URL parsen, zweitens muss nginx diese Daten kodieren und in den entsprechenden Header setzen. Ich möchte verschlüsselte Anmeldeinformationen nicht fest codieren. - Johnny
Ich bekomme eine "schlechte Anfrage", wenn ich es auf meinem Setup ausprobiere .. keine Ahnung? - Spock


Ich habe das mit der Antwort von alvosu arbeiten lassen, aber ich musste das Wort "Basic" in das Zitat der Base64-Zeichenfolge eingeben, so dass es so aussah:

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";

18
2018-02-03 21:53



Wissen Sie, wie Sie den Benutzernamen "password on the fly" mit nginx verschlüsseln können? Hartcodierte Anmeldeinformationen sind nicht flexibel, da ich Benutzer mit den von ihm in URL angegebenen Anmeldeinformationen authentifizieren möchte. - Johnny
Ich habe herausgefunden, wie man mit nginx zu base64 codiert wiki.ninx.org/HttpSetMiscModule#set_encode_base64. Dies ist nützlicher als fest codierte Anmeldeinformationen. - Johnny
@Johnny Links zu diesen Dokumenten sind jetzt hier: github.com/openresty/set-misc-nginx-module#set_encode_base64 - Al Dass


Setzen Sie proxy_set_header Authorization "USER_AND_PASS", wobei USER_AND_PASS = base64 (user: pass)


4
2018-02-03 18:01



Das Schlüsselwort fehlt Basic. - Jan-Philip Gehrcke