Metainformationen zur Seite
  •  

Reverse Proxy um HTTP Basic Auth zu entfernen

Manchmal kann es nützlich sein eine mit HTTP Basic Auth geschützte Seite auch ohne Anmeldung (z.B. automatisiert) abzufragen. So blende ich z.B. in meiner Visualisierung der Hausautomation (mit ioBroker) immer ein Livebild einer Webcam ein. Das Bild wird aber durch den Browser geladen (img src=). Bis Chrome 59 ging das noch per http://<user>:<pass>@cam/bild.jpg. Das wird ab nun, wohl aus Sicherheitsgründen, verhindert. Eine Alternative wäre es die Anmeldedaten für die Cam bei jedem Aufruf wieder einzugeben, ist aber unpraktisch. Daher übernimmt das nun ein kleiner nginx Reverse-Proxy für mich.

Die Lösung ist eigentlich einfach, es muss nur ein zustätzlicher Header an die Cam mitgeschickt werden: Authorization „Basic dXNlcm5hbWU6cGFzc3dvcnQ=“

Mein Proxy-Vhost lauscht auf Port 81, die Cam auf Port 80.

Der Base64-codierte Hash wird so erzeugt: echo -n „username:passwort“ | base64

Der Hash in diesem Beispiel sieht so aus: dXNlcm5hbWU6cGFzc3dvcnQ=

Das -n ist wichtig, sonst wird noch ein Zeilenumbruch angehängt und es funktioniert nicht.

#
# reverse proxy with authentication for meine-cam.de
#

server {
  listen 81;
  listen [::]:81;

  root /var/www/html;
  index index.html index.htm index.nginx-debian.html;
  server_name <hostname>;

  location / {
      proxy_pass http://meine-cam.de:80;
      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_set_header Authorization "Basic <base64 hash einfügen>";
  }

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;
}

Da damit natürlich die Authentifizierung umgangen wird, sollte man seinen Reverse Proxy anderweitig einschränken und zum Beispiel den Zugriff nur von einer bestimmten IP/Netz erlauben.

Diskussion

, 23.04.2019 14:31

Hallo,

danke für diesen tollen Artikel.

Habe das versucht nachzubauen, um meine Wansview Kameras für Fhem Tablet Ui in Verbindung mit Fully Browser passwortlos zu bekommen.

Den NGINX habe ich eingerichtet und er lauscht auf Port 3333.

Beim Aufruf der Seite erhalte ich sofort ein Credential Popup und werde zur Eingabe der Credentials aufgefordert.

Die Eingebe der bekannten Credentials werden nicht angenommen.

Entferne ich wieder den proxy_set_header Authorization Part dann kann ich mit den Kamera Credentials ohne Probleme einloggen.

Für jeden Tip hierbei wäre ich sehr dankbar.

VG Patrick

, 23.04.2019 15:44

Hi Patrick,

hast du den -n Parameter für echo beachtet? Und es sind normale Anführungszeichen, das Wiki hier macht andere draus.

Alternativ kannst du dir den Base64 Wert auch über die Entwicklertools deines Browsers holen, z.B. beim Firefox:

  F12 drücken und auf den Tab Network/Netzwerk wechseln
  Seite deiner Cam aufrufen und anmelden
  In den Dev-Tools eine URL, z.B. / auswählen und rechts bei Headers → Request Headers nach dem Authorization header schauen. Dort steht dann der für nginx benötigte Wert „Basic <irgendwas hash>“

Viele Grüße Oli

, 23.04.2019 16:50

Hallo,

danke für die Antwort. Das mit dem -n hab ich berücksichtigt ebenfalls die Hochkommas. Wenn ich das mit Firefox Developer Tools auslese, erhalte ich so etwas: Digest username=„fhem“, realm=„IPCamera Login“, nonce=„661b6a0bb8fa6c3f381aa4b56a40d8ad“, uri=„/hy-cgi/user.cgi?cmd=checkuserinfo“, response=„402739e447061d2b53846ba3367e56c8“, qop=auth, nc=00000002, cnonce=„31ee3ead34a48889“

Noch ne Idee?

VG Patrick

, 23.04.2019 21:17

Hi,

deine Kamera macht „Digest“- statt der „Basic“-Authentication. Sofern du die Methode in der Kamera nicht umstellen kannst, hast du Pech fürchte ich.

Siehe auch: https://stackoverflow.com/questions/9534602/what-is-the-difference-between-digest-and-basic-authentication

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
N B R H F