[gelöst] HTTPMOD - Website hat login-Verfahren geändert

Begonnen von Vize, 05 März 2017, 11:49:32

Vorheriges Thema - Nächstes Thema

Tiger84

leider nicht wirklich und dann sind bei dem Wetter auch wieder "Outdoor"-Projekte hinzugekommen...
Server: FHEM 5.7 auf Raspi 2/Jessie
Gateway: CUL USB 868MHz, 1Wire Buskoppler USB, Eservice
Sonstiges: Raumfeld, QNAP TS-451, VU+ Duo²
div. Zeug an Steckdosen und Sensoren

parabacus

Alles klar.. - Outdoor-Aktivitäten haben bei mir zwischenzeitlich auch wieder extrem erhöhte Priorität. Ab 3. September hab ich wieder richtig Zeit für anderes..  ;D
Stiebel Eltron LWZ 504 / FHEM auf Rasperry Pi 3 / THZ / Weather / TABLETUI / SB_SERVER / SB_PLAYER  / OBIS / Verkehrsinfo / speedtest / Presence / FRITZ / ZWDongle / ZWAVE / Calendar / CALVIEW/ IPCAM/ ABFALL / ESPEasy

brembs

Seit ein paar Tagen, nach einer Umstellung bei SENEC funktioniert der Login wieder einmal nicht mehr:

The request was rejected because the URL contained a potentially malicious String ";"

Sieht so als als bentzten sie SpringSecurity

https://github.com/spring-projects/spring-security

was keine URL im Format /auth/oauth/authorize;jsessionid=<sessionid> mehr zulässt. Habe mal im HTTPMOD Thread eine Anfrage hinterlassen und werde etwaige Lösungen hier posten. Nicht sicher ob man das mit entsprechenden Befehlen verhindern kann, oder ob Stefan das Modul updaten muss.

StefanStrobel

Hallo brembs,

Ich glaube nicht dass HTTPMOD geändert werden muss. Aber um die Konfiguration an das neue Login-Verfahren anzupassen muss sich jemand die Mühe machen und genau analysieren, welche Requests / Responses hin und hergeschickt werden. Mit den Replacement-Features von HTTPMOD müsste dann alles abbildbar sein.

Gruss
   Stefan

Vize

Hallo Stefan,

vor ein paar Tagen habe ich das neue login-Verfahren mal mit burp aufgezeichnet.
Wenn ich (in einigen Tagen) wieder zu Hause bin, schicke ich dir mal den Mitschnitt.

Es sieht so aus, als ob nun session-tokens (oder wie die heißen) erzeugt und mitgeschickt werden.
Mal sehn, ob man das mit den replacements von HTTPMOD nachbauen kann.

Ab welcher Version von HTTPMOD funktionieren die replacements? Habe lange nicht mehr ein update gemacht...  :-[

VG
Andreas

StefanStrobel

Hallo Andreas,

Ich glaube die Replacements sind seit 2016 drin.

Gruss
   Stefan

StefanStrobel

Hallo Andreas,

ich habe mir das neue Login-Verfahren mit Deinen Informationen mal näher angesehen.
Es ist mit HTTPMOD machbar.

Man muss ca. 15 Schritte abarbeiten und dabei Readings für code und state sowie zwei Session IDs tracken.
Die automatische Cookie-Funktion wird dabei vermutlich auch nicht funktionieren, da man zwei JSESSIONIDs vorhalten muss.
Mit Replacements sollte das aber alles machbar sein, aber es ist sicher mühsam ;-)

Sobald ich mal ein paar Stunden Zeit dafür habe, könnte ich versuchen eine Zusatzfunktion in HTTPMOD einzubauen, die das stark vereinfacht und den Redirects automatisch folgt, dabei die richtigen Session-Cookies verwendet und so auch code und state mitnimmt.
Die Fhem HttpUtils verfolgen zwar prinzipiell Redirects, aber soweit ich das verstanden habe, werden dabei die Cookies nicht mitgenommen. Folglich muss man es bisher manuell in HTTPMOD konfigurieren.

Falls Du Dir die Mühe machen möchtest:
1) GET /login
aus der Response die erste Session ID holen und aus der Location den State holen

2) GET /auth/oauth/authorize?client_id=portale&redirect_uri=https://mein-senec.de/login&response_type=code&state=QeiJtQ
mit dem Session Cookie und dem State aus dem ersten Request
aus der Response die neue Session-Id für /auth holen

3) GET /auth/login
mit der Session Id als Cookie aus 2

4) POST /auth/login
mit der Session Id als Cookie aus 2
und mit User und Password
aus der Response die neue Session-Id holen und aus der Location den State

usw.

Aufpassen muss man dabei dass man die richtigen Session-Ids zum passenden Pfad nimmt.

Gruss
   Stefan

brembs

OK, klingt aufwändig aber machbar, vielen Dank für die Anleitung! Hoffe, ich finde etwas Zeit um das mal aus zu probieren...

StefanStrobel

Hallo,

anbei eine neue Version von HTTPMOD zum Testen. Es gibt zwei neue Attribute:

enableRedirects
aktiviert ein Redirect-Handling innerhalb von HTTPMOD, so dass auch Cookies zwischen Redirects verwaltet werden können.

dontRequeueAfterAuth
verhindert dass der letzte Request nach Durchführung der Login-Prozedur nochmals gesendet wird.

Für die meine-senec Website sieht eine einfache Konfiguration dann folgendermassen aus:


define senec HTTPMOD https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0 0
attr senec dontRequeueAfterAuth 1
attr senec enableControlSet 1
attr senec enableCookies 1
attr senec handleRedirects 1
attr senec reAuthRegex Login.Portal
attr senec sid01URL https://mein-senec.de/auth/login
attr senec sid01Header1 Accept: text/html, application/xhtml+xml, image/jxr, */*
attr senec sid01Data =&username=xxxx&password=xxxx


Ich hoffe es klappt auch bei Euch auf Anhieb ;-)

Gruss
   Stefan

Vize

Hi Stefan,

es läuft!!!  ;D 8)

Vielen, vielen Dank nochmals an dieser Stelle!
Wahnsinn, was es doch für programmiertechnische Perlen hier gibt!

VG
Andreas

Vize

Zitat von: Tiger84 am 08 Februar 2018, 18:55:52Ich stelle mir aber die Frage, warum es über die Daten über die Website https://mein-senec.de einbinden soll, wenn ich doch genauso gut per LAN und IP auf den Speicher zugreifen kann? Hier kann ich durch den Aufruf der lokalen IP ohne Benutzername usw alle Daten sehen.

Hi,

ja, man kann auch im LAN eine HTTPMOD-Abfrage des Speichers machen.
"Nachteil" hierbei ist, dass die interne Zeitanzeige des SENEC-Speichers 1 bzw. 2 Stunden (Sommer/Winterzeit) hinkt. Dadurch passen die Tageswerte dann nicht.
Ausserdem kann man sich von der internen Seite nicht alle Sachen holen, die im Online-Portal dargestellt werden, z.B. getrennte Darstellung Netzbezug zu Netzeinspeisung oder auch die Daten zu (falls gebucht) EconamicGrid- und Gutscheinbeladungen.

Anbei mal ein screenshot meiner readingsGroup zum SENEC.

VG
Andreas

brembs

Alles funktioniert wieder! Stefan, Du bist absolute Spitze! Genial!

@Vize: Ich komme seit der Umstellung auf EconamicGrid gar nicht mehr auf den lokalen Router drauf und kann da also keine Werte mehr auslesen. Das soll so sein, haben die mir damals gesagt. Kommst Du noch auf den lokalen Router und kannst dort Werte auslesen? Wenn ja, wie machst Du das?

Vize

Moin,

das kommt darauf an, welche Version des Speichers du hast.
Ohne "Umwege" geht das nur bei den V2 (Li) Speichern. Die haben keinen externen VPN-Router mehr, sondern einen integrierten.
Diese Speicher kann man dann ganz normal im LAN über die IP-Adresse erreichen.

Bei den älteren Klumpen (Pb und Li) geht das leider nicht. Dort wird dann auch keine Adresse aus deinem LAN auf dem Display angezeigt, sondern die des Senec-VPNs.

VG
Andreas

brembs

Ah, alles klar, das erklärt es. Dauert bei mir noch 5 Jahre, bis ich mir einen neuen Speicher zulege...  8)

xerion

Zitat von: Vize am 05 Juli 2018, 16:55:13
Hi,

ja, man kann auch im LAN eine HTTPMOD-Abfrage des Speichers machen.
"Nachteil" hierbei ist, dass die interne Zeitanzeige des SENEC-Speichers 1 bzw. 2 Stunden (Sommer/Winterzeit) hinkt. Dadurch passen die Tageswerte dann nicht.
Ausserdem kann man sich von der internen Seite nicht alle Sachen holen, die im Online-Portal dargestellt werden, z.B. getrennte Darstellung Netzbezug zu Netzeinspeisung oder auch die Daten zu (falls gebucht) EconamicGrid- und Gutscheinbeladungen.

Anbei mal ein screenshot meiner readingsGroup zum SENEC.

VG
Andreas

Hallo Andreas,

wäre es vielleicht möglich, dass du die ReadingsNames und Regex hoch lädst. Ich würde das auch gerne über die Seite aus dem LAN umsetzen aber bekomme das irgendwie mit den Regex nicht hin.
Ich würde mich  freuen, wenn du meinen Einladungscode für Tibber, der Stromanbieter, der dir hilft, deinen Stromverbrauch zu verstehen und zu reduzieren, nutzt: https://invite.tibber.com/5fc08jbs. So bekommen wir beide 50 Euro und 100 % Ökostrom / https://geld-fuer-eauto.de/ref/334561880