Mein Modul HomeConnect hat ein Problem mit dem csrfToken

Begonnen von swhome, 12 Juni 2017, 13:31:29

Vorheriges Thema - Nächstes Thema

swhome

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).

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
Im Einsatz: FHEM auf Raspberry Pi mit 350 devices, hauptsächlich Homematic Wired und HM-Heizungsregler, dazu diverse Eigenbauten für Fussbodenheizung und LED Beleuchtung. Und jetzt mit Alexa!

rudolfkoenig

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.

swhome

#2
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.
Im Einsatz: FHEM auf Raspberry Pi mit 350 devices, hauptsächlich Homematic Wired und HM-Heizungsregler, dazu diverse Eigenbauten für Fussbodenheizung und LED Beleuchtung. Und jetzt mit Alexa!

Markus M.

Du kannst im der Rücksprung Adresse keine eigenen Parameter angeben?
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

swhome

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"
Im Einsatz: FHEM auf Raspberry Pi mit 350 devices, hauptsächlich Homematic Wired und HM-Heizungsregler, dazu diverse Eigenbauten für Fussbodenheizung und LED Beleuchtung. Und jetzt mit Alexa!

Markus M.

Das bedeutet dass es zumindest bei statisch gesetztem Token problemlos funktioniert.
Fang doch einfach mal damit an.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

swhome

Ok, ich werde die Verwendung eines statischen Tokens in meiner Wiki Page dokumentieren. Ist wahrscheinlich immer noch sicherer als kein Token zu benutzen.
Im Einsatz: FHEM auf Raspberry Pi mit 350 devices, hauptsächlich Homematic Wired und HM-Heizungsregler, dazu diverse Eigenbauten für Fussbodenheizung und LED Beleuchtung. Und jetzt mit Alexa!

Markus M.

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.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

CoolTux

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.
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.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net