peter9teufel / iobmobile-issues

Repository to only track issues with IOB Mobile, code is not hosted in this repository.
10 stars 0 forks source link

Extern HTTPS mit Authentifizierung - HTML Elemente #51

Open HackyPaddy opened 1 month ago

HackyPaddy commented 1 month ago

Moin Peter,

da bin ich wieder :) Ich hab nun HTTPS aktiviert und keine interne IP, sondern eine externe Domain eingestellt.

Der Zugriff klappt. Du glaubst garnicht, was mir das nun für ein Nervkram erspart. Deine App wird immer wichtiger.

Aber ich glaub, ich hab den nächsten Fehler. Mit HTTPS von extern und eingeschalteter Authentifizierung klappt der Zugriff auf die Diagramme vom e-Charts Adapter nicht mehr. Die Diagramme sind als Typ HTML eingebettet.

Mit einer internen IP klappt der Zugriff aber, insofern gehe ich nicht von einem Bug in der App aus. Da liegt irgendwo anders der Hase im Pfeffer.

Wie machst Du den Zugriff auf die Diagramme?

Evtl. gibt es ein Port-Problem... Aber das Log schweigt, selbst auf Debug und irgendwie komm ich nicht weiter. Hast Du ne Idee?

Lg Patrick

HackyPaddy commented 1 month ago

So schnell hab ich schon nen Ansatz. Es liegt an der web.0 Instance. Wenn ich den Port nach aussen freigebe, dann laufen auch die HTML-Einbettungen.

Aber die Instance ohne HTTPS und ohne Authentifizierung freigeben? Au weia...

Jetzt ist die Frage, wie man App-technisch umsetzen kann, dass die App mit der Instance über HTTPS kommuniziert und die Authentifizierungdaten übergibt. Sind ja die gleichen :)

Schalte ich bei dem Adapter HTTPS ein, dann werden die HTML-Einbettungen nicht mehr geladen. Dann passiert nix. Nehm ich das HTTPS wieder raus, und dafür die Authentifizierung rein, dann kommen statt der Diagramme ein Login-Fenster :)

Also:

  1. Die App muss http aufrufen, wenn HTTPS ausgeschaltet ist, und HTTPS aufrufen, wenn HTTPS aktiviert ist. Dann wäre der erste Step getan.
  2. Müssen wir uns was einfallen lassen, wie man da die Authentifizierung übergeben kann, ohne das manuell in dem kleinen Fenster einzugeben ODER
  3. Ich mache dafür ne extra Web-Instance und geb einen individuellen Port und stelle die Rechte entsprechend ein. Dann müsste man in der App (in der Konfig) einen individuellen Web-Port festlegen können. Gern optional, weil 8082 ist ja standard. Aber es sollte die Möglichkeit geben, den Port individuell festlegen zu können.

Ich weiß, ich bin schwierig 😂 Aber ich mach Dein App nur besser :)

peter9teufel commented 1 month ago

Bin grad nicht an meinem ioBroker um mir das in der Config genau anzusehen, aber soweit ich es auswendig weiß, ist die Schwierigkeit, dass der Web Adapter (über den ja die Charts ausgeliefert werden) einen separaten Port hat.

Wie genau hast du das im Detail alles konfiguriert?

Rein für den Zugriff auf den ioBroker Admin wärs ja so --> wenn du sauber von außen per HTTPS auf deinen ioBroker gehst, geht das über Port 443 per DynDNS auf deine öffentliche IP (bzw. direkt via URL wenn du eine statische öffentliche IP hast), dein Router leitet den Request der über den Port 443 daher kommt an ein konfiguriertes Gerät weiter wo dann per Reverse Proxy auf deine ioBroker Instanz weitergeleitet wird.

Die App muss aber über mehrere Ports die unterschiedlichen Adapter ansprechen (SocketIO, SimpleAPI, Web), das so konfigurieren, dass es extern läuft stell ich mir jetzt gelinde gesagt etwas kompliziert vor 😄

VPN wäre keine Option? Über VPN und Konfiguration in der App mit der internen IP läufts problemlos. Portfreigaben für die ganzen benötigten Ports sind halt immer so eine Sache, auch wenn Authentifizierung mit drin ist machst du halt ein Einfallstor auf, das bei einem evt. Sicherheitsleck von ioBroker dann weit offen steht.

LG, Peter

HackyPaddy commented 1 month ago

Moin Peter,

endlich schaffe ich es mal Dir in der Sache zu antworten. Meine Konfiguration sieht wie folgt aus:

Individuellen Port für den Socket.io sowie simple API ist im Router freigegeben, deshalb auch mit HTTPS und Authentifizierung. Ich nutze für Deine App jeweils eine eigene Instanz von socket.io und simple-api.

Der Nutzer, der sich da anmelden darf, hat nur eingeschränkte Rechte.

Wenn es ganz hart auf hart kommt, und jemand von aussen Zugriff bekommt, kann er nur ein paar States lesen und schreiben. Dann geht hier das Licht aus, also alles nicht weltbewegend. Und ob bei uns das Licht brennt, könnte man notfalls auch von der Straße sehen, dazu muss man nicht ins Netzwerk einbrechen.

Allerdings müsste er dafür aber im Netzbereich eines bestimmten Mobilfunkanbieters sein und zudem auch geografisch in meiner Region, sonst wird der Zugriff eh verweigert.

Aber ja, ich hab mich mit der Thematik auch schon befasst und das Risiko ist überschaubar und ich finde, durch die Konfig, auch sicher genug. Aber: No System is safe :)

Du hast auch recht, dass über die web-Instanz die Bilder von Chart-Adapter übergeben werden. Deine App ist so konfiguriert, dass immer der Port 8082 (Standart-Port) von der ersten web-Instanz genutzt wird. Diesen Port müsste man anpassen können.

Dann kann ich für die App auch eine eigene web-instanz mit Authentifizierung und eingeschränkter Kontrolle hochziehen.

Die Frage ist nur, ob die Übergabe der Zugangsdaten genauso edel erfolgen kann, wie bei simple-api bzw. socket.io. Dazu müsste ich mich in den Adapter mal richtig einarbeiten. Hast Du da ne API-Beschreibung?

Lg Patrick