Autor Thema: Authentication gegen FHEMWEB  (Gelesen 2252 mal)

Offline PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 546
Authentication gegen FHEMWEB
« am: 22 Februar 2017, 20:48:11 »
Guten Morgen!

Da es im FTUI 2.6-Thread untergegangen ist, hier der zweite Versuch:

Ich hatte vor Monaten mal probiert, über fhemweb_url via
Code: [Auswählen]
<meta name="fhemweb_url" content="http://user:pass@host:8083/fhem">
Authentication zu FHEM hinzubekommen. Gibt's dafür zufällig schon eine Lösung? Das wäre sehr hilfreich.

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

Offline Familienpapi

  • Full Member
  • ***
  • Beiträge: 123
  • vielen vielen Dank für die hilfreichen Posts
Antw:Authentication gegen FHEMWEB
« Antwort #1 am: 22 Februar 2017, 22:33:14 »
Ist etwas offtopic: auf Android verwende ich den Fully Kiosk Browser. Auch die kostenlose Version kann Authorisierung und funktioniert. Das Passwort ist da auch nicht sichtbar. Und so als Vollbild ohne irgendwelche Leisten ist es auch schöner.

gesendet von meinem Note via Tapatalk

FHEM@RPi2 RaspBian Jessie
HTTPS mit User/Pass, HTTPS TabletUI26x, MQTTS mit Zertifikate
HM-LAN, JeelinkV3c868, ZWAVE, PushBullet, Email Versand, Busware TPUART EIB/KNX mit knxd
Arduino / ESP8266 / ESP32 mit eigener Firmware

Offline PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 546
Antw:Authentication gegen FHEMWEB
« Antwort #2 am: 23 Februar 2017, 09:12:42 »
Hi! Meine Frage bezog sich auf die Verbindung FTUI<->FHEM. Die ist insb. dann wichtig, wenn FHEM nicht die FTUI-Seiten ausliefert sondern bspw. ein Apache.

Patrick


Von unterwegs gesendet.
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

Offline PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 546
Antw:Authentication gegen FHEMWEB
« Antwort #3 am: 25 Februar 2017, 20:10:58 »
Mahlzeit!

Ich habe mir das Thema mal selbst angesehen. Offenbar ist das Problem mit überschaubarem Aufwand lösbar, nämlich durch Erweiterung der jQuery.ajax()-Objekte wie folgt:
            beforeSend: function (xhr) { //DEBUG: pr
              xhr.setRequestHeader ("Authorization", "Basic " + "aGllcjpnaWJ0c25peHp1c2VoZW4=");
            }
So wie es aussieht - ohne die Funktionsweise von FTUI im Detail zu kennen -, ist das an maximal 4 Stellen in fhem-tablet-ui.js der Fall und leider auch in 10 widgets.
aGllcjpnaWJ0c25peHp1c2VoZW4= ($user:$password als base64) würde man dann in einen META-Tag-packen.

@setstate: Ist das machbar?

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

Offline setstate

  • Hero Member
  • *****
  • Beiträge: 3763
  • FHEM TabletUI
    • FHEM Tablet UI
Antw:Authentication gegen FHEMWEB
« Antwort #4 am: 25 Februar 2017, 20:25:15 »
machbar ist alles, aber bei der Zeit und beim Interesse am Thema sieht es eher eng aus.

Offline PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 546
Antw:Authentication gegen FHEMWEB
« Antwort #5 am: 26 Februar 2017, 02:06:27 »
Hi!

Danke für die ehrliche Rückmeldung.

machbar ist alles, aber bei der Zeit und beim Interesse am Thema sieht es eher eng aus.

Ich bin persönlich immer ein Anhänger von "Erst die Pflicht, dann die Kür." und sehe Sicherheit als Ersteres. Zumal mir ehrlich gesagt etwas unwohl dabei ist wenn ich an die Setups mancher Tablet-UI-Nutzer denke, bei denen die Verbindung UI->FHEM offen über's Internet geht.

Wie kriegen wir die Kuh vom Eis? Würdest Du Dir einen Patch ansehen, wenn ich mich daran probiere?

Patrick

lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

Offline setstate

  • Hero Member
  • *****
  • Beiträge: 3763
  • FHEM TabletUI
    • FHEM Tablet UI
Antw:Authentication gegen FHEMWEB
« Antwort #6 am: 26 Februar 2017, 08:41:04 »
Wo soll denn User und pw hinterlegt sein? Doch nicht in Klarschrift im HTML?

Offline PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 546
Antw:Authentication gegen FHEMWEB
« Antwort #7 am: 26 Februar 2017, 14:00:46 »
Hallo Setstate!

Wo soll denn User und pw hinterlegt sein? Doch nicht in Klarschrift im HTML?

Grundannahme und damit Designentscheidung von Tablet UI ist, dass man jedem, der die Seite aufrufen kann, voll vertrauen kann. Das könnte man - und so verstehe ich Deinen Hinweis - zu Recht hinterfragen. Das möchte ich hier aber garnicht. Da aus dem o. g. Grund der Browser jeglichen Code ausführt, um mit FHEM zu kommunizieren, muss er auch Benutzername und Passwort (oder Werte, die sich in diese transformieren lassen) kennen. Das geht - man ergänze gerne - u. a. durch:
  • Erfragen der Daten beim Nutzer und Ablegen auf dem Client, z. B. in einem Cookie.
  • Ablegen der Daten im Code der Seite - Ob man sie im JS oder in der Seite selbst versteckt und wie man sie ggf. obfuscated macht Unter dem Strich keinen Unterschied.
Da es ohnehin sinnvoll und mit Bordmitteln möglich ist, den Zugriff auf die TabletUI-Seite gesondert abzusichern, finde ich Ansatz 2 vollkommen ausreichend. Konkret würde ich, wie oben beschrieben, den base64-Wert in einem META-Tag ablegen. Das spart dem Browser das Encoding, macht die Anmeldedaten erst auf den zweiten Blick sichtbar und ist verglichen mit Ansatz 1 von überschaubarem Aufwand.

Bitte verstehe mich nicht falsch. Ich verwendet TabletUI mit steigender Begeisterung und habe inzwischen meine Suche nach einer flexiblen FHEM-iOS-App (nach dem Kauf aller im App Store verfügbaren) durch Realisierung in TabletUI beenden können. Daher ist es für mich unverzichtbar geworden, ich würde aber gerne dennoch mein FHEM besser absichern.

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

Offline setstate

  • Hero Member
  • *****
  • Beiträge: 3763
  • FHEM TabletUI
    • FHEM Tablet UI
Antw:Authentication gegen FHEMWEB
« Antwort #8 am: 26 Februar 2017, 14:24:49 »
Zitat
base64-Wert in einem META-Tag ablegen

Also würde ich anstatt

'Authorization': 'Basic ' + btoa('myuser:mypswd')
gleich das aufrufen
'Authorization': 'Basic ' + 'bas64String'
Erwarten die Server immer ein base64 Wert? Ich kenne mich da nicht aus?
Muss sich dann jeder den base64 Wert selbst erzeugen? Ist das nicht zu umständlich?
Ich will das, wenn schon, allgemein für alle gestallten.

Offline PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 546
Antw:Authentication gegen FHEMWEB
« Antwort #9 am: 26 Februar 2017, 17:02:09 »
Hi!

Erwarten die Server immer ein base64 Wert? Ich kenne mich da nicht aus?
So wie ich das sehe bei Basic ja: https://en.wikipedia.org/wiki/Basic_access_authentication unter Protocol->Client side
So habe ich es bei mir auch getestet, wenn auch zugegebenermaßen nur kurz.

Muss sich dann jeder den base64 Wert selbst erzeugen? Ist das nicht zu umständlich?
Ich will das, wenn schon, allgemein für alle gestallten.
Du hast vermutlich Recht, den Nebenkriegsschauplatz kann man sicherlich vermeiden.

Wenn Du einen Tester brauchst, sag Bescheid.

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

Offline setstate

  • Hero Member
  • *****
  • Beiträge: 3763
  • FHEM TabletUI
    • FHEM Tablet UI
Antw:Authentication gegen FHEMWEB
« Antwort #10 am: 27 Februar 2017, 06:45:49 »
Wenn im FHEMWEB basicAuth angeschaltet ist, funktioniert Longpoll mit Websocket nicht. Oder übersehe ich da was?

Was ist nun besser: wenn "myUser:myPass" oder "D135336HF=" (base64 Token) im HTML als Meta Tag hinterlegt wird? Im FHEMWEB wird als Attribute der base64 String erwartet. Ist also nichts unbekanntes für interessierte User. 

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15727
Antw:Authentication gegen FHEMWEB
« Antwort #11 am: 27 Februar 2017, 07:47:28 »
Sehe ich das richtig das es dann nur bei base64 geht. Es ist ja so das man da auch Perlfunktionen nehmen kann.
Auch glaube ich mich zu entsinnen das Rudi in den letzten Tagen da auch noch SHA256 Hash mit eingearbeitet hat. Kann mich aber auch irren.

https://forum.fhem.de/index.php/topic,67192.msg589351.html#msg589351
« Letzte Änderung: 27 Februar 2017, 07:52:20 von CoolTux »
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline setstate

  • Hero Member
  • *****
  • Beiträge: 3763
  • FHEM TabletUI
    • FHEM Tablet UI
Antw:Authentication gegen FHEMWEB
« Antwort #12 am: 27 Februar 2017, 08:01:48 »
Dann ist es ja besser, wenn der credentials String im Header direkt benutzt wird, dann ist der User für die richtige Codierung verantwortlich.

Offline PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 546
Antw:Authentication gegen FHEMWEB
« Antwort #13 am: 27 Februar 2017, 08:59:13 »
Wartet mal. Der Hinweis mit SHA256 macht mir Sorgen. Das muss ich mir ansehen.


Von unterwegs gesendet.
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

Offline PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 546
Antw:Authentication gegen FHEMWEB
« Antwort #14 am: 27 Februar 2017, 15:03:30 »
Hi!

Sorry. Habe mal geschaut. Ich hatte die Befürchtung, dass Rudi Digest Authentication einbauen möchte. Das hätte die Implementierung verkompliziert. Hatte aber einen Denkfehler, so dass alles wieder im grünen Bereich ist.

Zur Frage ob user/pass in der Website als base64 oder im Klartext abgelegt werden sollen. Um den Supportaufwand klein zu halten tendiere ich inzwischen zu setstates Ansatz, den Klartext abzulegen und btoa() im JS durchzuführen.

Rudis Änderungen haben übrigens auf Tablet UI keine Auswirkungen, da sie nur die Speicherung der Daten in FHEM betreffen. "Über die Leitung" gehen aber die gleichen Daten.

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

 

decade-submarginal