Ein Java-Client für FFB-Depots. Features: Stammdaten und Depotbestände abholen. Es war ursprünglich eine Scraping-Library für die FFB, die aus dem Projekt Hibiscus FFB-Depot entstanden ist. Inzwischen verwendet sie das mobile JSON-Interface von Fidelity.
(English) This used to be a FFB scraping library written in Java. Since there is now a mobile HTTP-JSON-Interface, the project switched to this kind of implementation. It is used in the Hibiscus FFB Depot-Project (see link above).
- Holen von Depotinformationen (Depotbesitzer, Depotnamen, -bestände, etc.).
- Auslesen der Depotperformance seit Einstand (Gesamtperformance aller Depots).
- Auslesen der Bestände jedes einzelnen Depots.
- TODO: Posteingang.
- TODO: Historische und offene Umsätze.
Zunächst sollte eine PIN und eine Loginkennung erstellt werden:
/* testlogin der FFB */
FfbLoginKennung LOGIN = FfbLoginKennung.of("22222301");
FfbPin PIN = FfbPin.of("91901");
Mit diesen Logindaten lässt sich ein Client erstellen. Dann führt man ein Login aus und holt sich die gewünschten Daten.
FfbMobileClient mobileAgent = new FfbMobileClient(LOGIN, PIN);
mobileAgent.logon();
// Value-Objekte.
MyFfbResponse accountData = mobileAgent.fetchAccountData();
FfbPerformanceResponse performance = mobileAgent.getPerformance();
Da eine Loginkennung mehrere Depots enthalten kann (teilweise eine Depotnummer mehrfach), lassen sich die Gesamtbestände einfach mit der Utils-Klasse ermitteln:
FfbDepotNummer depotNummer = FfbDepotNummer.of("222223"); // Login ohne -01.
BigDecimal gesamtBestand = FfbDepotUtils.getGesamtBestand(accountData, depotNummer);
Hinergrund zu den Depotnummern: Es kann mehrere Depots mit der selben Depotnummer geben: Einmal ein Standard-Depot, und einmal ein VL-Depot. Eine Loginkennung kann aber auch ggf. auf mehrere Depots zugreifen.
(German) Das Protokoll ist von der FFB nicht offiziell freigegeben. Zum Sniffen habe ich die App Packet Capture für Android genutzt.
(English) The protocol is neither documented or officially released. For sniffing I used packet capture for android, see link above.
(German) Das Protokoll ist furchtbar schlecht designed. Es besitzt außer https (tls) keine Transportsicherheit. Einige Felder fallen je nach anderen Feldern weg, oder sie nutzen oft den falschen Datentyp (gestringte Felder). Das sind typische Fehler einer eigenen Protokollentwicklung. Man hätte natürlich auch einfach HBCI/FinTS nutzen können, womit man auch XML-Signaturen etc. hätte nutzen können.
Die Stringifizierung der Daten wird mittels Jackson Deserializer wieder rückgängig gemacht. Derzeit werden Geldbeträge in BigDecimal gewandelt. Ein eigener Datentyp inkl. Währung wäre ebenfalls möglich.
(English) The protocol is awful. It does not have transport security other than relying on https (tls). Most datatypes were stringified (booleans, floats, dates, etc.). This is a problem when you design your own protocols. There is FinTS (famous among german banks) which uses XML Signatures etc.
Stringification is being reversed using Jackson Deserializers. Money amounts are converted to BigDecimal instances. It would also be possible to convert to it's own datatype, including currency.
The bank is not very trustworthy. It does offer the obsolete TLS 1, but no HTTP2.0 nor SPDY. On the other hand, triple DES ciphers are allowed, they are probably vulnerable to Secure Client-Initiated Renegotiation, to BREACH and BEAST (DES-CBC3-SHA).
$ testssl.sh -p www.fidelity.de
--> Testing protocols (via sockets except TLS 1.2 and SPDY/NPN)
SSLv2 not offered (OK)
SSLv3 not offered (OK)
TLS 1 offered
TLS 1.1 not offered
TLS 1.2 offered (OK)
SPDY/NPN not offered
Das Protokoll basiert auf dem Mobile-Protokoll der FFB-App. Es verwendet Cookies für Session-Informationen und gibt bei bestimmten GET-Requests einfach JSON-Responses aus.
Parameter | Content |
---|---|
URL | https://www.fidelity.de/de/mobile/MyFFB/account/userLogin.page |
Methode | POST |
Request-Body | login=*user*&password=*passwort* |
Header |
|
Response-Body |
|
Parameter | Content |
---|---|
URL | https://www.fidelity.de/de/mobile/MyFFB/account/MyFFB.page |
Methode | GET |
Header |
|
Response-Body |
|
Anmerkdungen | Hier wird bislang nur ein Ausschnitt der Daten gezeigt. |
Parameter | Content |
---|---|
URL | https://www.fidelity.de/de/mobile/MyFFB/account/performance.page |
Methode | GET |
Header |
|
Response-Body |
|
Anmerkungen | Die Ausgabe erfolgt "pretty printed" und mit eigentlich unnötigen, sogar doppelten Zeilenumbruechen. Das Datum ist irrsinnigerweise nicht per ISO 8601, sondern im Deutschen Datumsformat angegeben. Ach die Prozentbeträge verwenden das international unübliche Komma als Dezimaltrennzeichen. Die Begriffe Zufluss, Durchschnitt und Gesamt sind Deutsche Begriffe, während die restlichen Begriffe englisch sind (login, performance, error, message). |
Parameter | Content |
---|---|
URL | https://www.fidelity.de/de/mobile/account/logout.page |
Method | GET |
Header |
|
Response-Body | none |
Additional information | Cookie should probably be deleted by hand. |