FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: swhome am 12 Juni 2017, 13:31:29

Titel: Mein Modul HomeConnect hat ein Problem mit dem csrfToken
Beitrag von: swhome am 12 Juni 2017, 13:31:29
Hallo liebe Entwickler,

ich habe ein Modul zur Steuerung von Hausgeräten entwickelt, welches mit einer Cloud-API des Anbieters "Home Connect" kommuniziert (Details im Wiki (https://wiki.fhem.de/wiki/HomeConnect)).

Die Anmeldung an diesen Cloud-Dienst erfolgt mit Oauth 2.0. Hierbei generiert FHEM einen Link auf den Anmeldeserver, und dieser macht nach erfolgreichem Login einen redirect zurück zu FHEM. Dieses Verfahren funktioniert seit der Einführung von csrf nicht mehr.

OAuth bietet natürlich eine Unterstützung für CSRF-Protection: Ich kann ein Attribut "state" im Login-Request definieren, welches danach im Redirect wieder auftaucht. Jedoch ist der Name "state" fest im Protokoll definiert und kann nicht zu "fwcsrf" umbenannt werden.

Daher nun meine Frage: Könnte FHEM anstelle von einer Auswertung des einen Attributs "fwcsrf" den gesamten Request-String nach dem Token durchsuchen? Oder vielleicht zusätzlich nach "state" schauen? Oder so ein Verhalten konfigurierbar machen?

Vielen Dank für ein feedback
Stefan
Titel: Antw:Mein Modul HomeConnect hat ein Problem mit dem csrfToken
Beitrag von: rudolfkoenig am 12 Juni 2017, 13:42:49
csrfToken ist optional (siehe Doku), man kann ihn auf einen festen Wert setzen, oder die zufaellig generierte vor dem Spezifizieren des Links abfragen. Die Vorschlaege zur Verbesserung kann ich erst beurteilen, wenn ich das Problem besser kenne, z.Bsp. anhand von einem konkreten Beispiel.
Titel: Antw:Mein Modul HomeConnect hat ein Problem mit dem csrfToken
Beitrag von: swhome am 12 Juni 2017, 14:01:42
Hallo Rudolf, vielen Dank für die schnelle Antwort.

Viel konkreter kann ich fast nicht werden, aber ich hab ein Beispiel. Der folgende Link ist der Redirect, den Home Connect nach Abschluß der Anmeldung generiert:

http://fhtest:8083/fhem?cmd.Test=set%20hcconn2%20auth%20&code=eyJ4LXJlZy...yJ9&state=csrf_147948606605141&grant_type=authorization_code


Er besteht aus der redirect URL, die bei der Registrierung der Applikation in der Home Connect Cloud vordefiniert werden muss, dem code den ich zur späteren Kommunikation mit dem API brauche, dem State (in den ich das csrf Token geschrieben habe) und dem vom Protokoll fest vorgegebenen "grant type" der nichts zur Sache tut.

Diese URL produziert im Log den
2017.06.12 12:51:06.215 3: FHEMWEB WEB CSRF error:  ne csrf_147948606605141. For detals see the csrfToken FHEMWEB attribute

Natürlich kann man csrf abschalten aber das ist unpopulär.
Titel: Antw:Mein Modul HomeConnect hat ein Problem mit dem csrfToken
Beitrag von: Markus M. am 12 Juni 2017, 14:05:20
Du kannst im der Rücksprung Adresse keine eigenen Parameter angeben?
Titel: Antw:Mein Modul HomeConnect hat ein Problem mit dem csrfToken
Beitrag von: swhome am 12 Juni 2017, 14:08:54
In der URL kann ich zwar Parameter angeben, aber nachdem sich das csrf Token bei jedem Start ändert, ist dies nicht praktikabel.

Das einzige Attribut was ich dynamisch belegen kann ist eben dieses "state"
Titel: Antw:Mein Modul HomeConnect hat ein Problem mit dem csrfToken
Beitrag von: Markus M. am 12 Juni 2017, 14:11:31
Das bedeutet dass es zumindest bei statisch gesetztem Token problemlos funktioniert.
Fang doch einfach mal damit an.
Titel: Antw:Mein Modul HomeConnect hat ein Problem mit dem csrfToken
Beitrag von: swhome am 12 Juni 2017, 14:37:17
Ok, ich werde die Verwendung eines statischen Tokens in meiner Wiki Page dokumentieren. Ist wahrscheinlich immer noch sicherer als kein Token zu benutzen.
Titel: Antw:Mein Modul HomeConnect hat ein Problem mit dem csrfToken
Beitrag von: Markus M. am 12 Juni 2017, 15:06:43
Ist fast genauso sicher wie ein dynamischer Wert.

Wie oft wird der Aufruf denn gebraucht? Kannst du die Rücksprungadresse im nachhinein ändern? Falls ja, probier doch ob du das nicht automatisieren kannst. Oder behandle den Call komplett im Modul statt über ein Set zu gehen.
Schau dir mal den Webhook bei Netatmo an.
Titel: Antw:Mein Modul HomeConnect hat ein Problem mit dem csrfToken
Beitrag von: CoolTux am 17 Juli 2017, 10:37:21
Zitat von: Markus M. am 12 Juni 2017, 15:06:43
Ist fast genauso sicher wie ein dynamischer Wert.

Wie oft wird der Aufruf denn gebraucht? Kannst du die Rücksprungadresse im nachhinein ändern? Falls ja, probier doch ob du das nicht automatisieren kannst. Oder behandle den Call komplett im Modul statt über ein Set zu gehen.
Schau dir mal den Webhook bei Netatmo an.

Das NUKIDevice Modul verwendet auch ein Recall/Webhook und macht das ganze Modulintern.