Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support für PushTAN 2.0 (Decoupled Verfahren) #74

Closed
danielr1996 opened this issue Nov 6, 2022 · 7 comments
Closed

Support für PushTAN 2.0 (Decoupled Verfahren) #74

danielr1996 opened this issue Nov 6, 2022 · 7 comments

Comments

@danielr1996
Copy link
Contributor

I noticed that in order to access all statements (Umsätze) I need to provide an actual TAN consisting of six digits and displayed in the S-Push TAN app, whereas when viewing all statements on the Sparkasse Webinterface I can just swipe in the app to confirm the action.

Is this something hbci4j can also support, or is this simply not supported with the hbci api? A few years ago I tried implementing a hbci client myself in nodejs (boy is that an ugly API) and I remember that there were different numerical codes to request different tan schemas, e.g. comdirect supported smstan or phototan. If I remember correctly there was also a method to request the available tan methods from the api.

From a developer perspective this would be way more easy to implement as I wouldn't need to implement means of supplying the tan but can just wait for the user to confirm the request in the app.

@willuhn
Copy link
Collaborator

willuhn commented Nov 7, 2022

Du kannst hier auf Deutsch schreiben. FinTS wird ohnehin nur in Deutschland verwendet.
Dieses neue TAN-Verfahren nennt sich "PushTAN 2.0" - bzw. laut offizieller Spezifikation "Decoupled-Verfahren". Per Webseite unterstützen es schon viele Banken, per FinTS nach meinem Wissen bisher nur die Sparkassen. Voraussetzung für den Support in FinTS ist die Unterstützung von HKTAN in Version 7 (ist bereits in HBCI4Java enthalten). Damit es genutzt werden kann, muss aber noch das eigentliche Austauschverfahren implementiert werden, wie unter https://www.hbci-zka.de/dokumente/spezifikation_deutsch/fintsv3/FinTS_3.0_Security_Sicherheitsverfahren_PINTAN_2020-07-10_final_version.pdf in Kapitel B.4.2.2 beschrieben. Das ist in HBCI4Java bisher noch nicht umgesetzt. Im Prinzip muss hier eine Funktion implementiert werden, die in einem separaten Thread mit der laufenden FinTS-Session bei der Bank pollt, ob die Freigabe durch den User bereits erfolgt ist. Währenddessen muss der Main-Thread mit der eigentlichen Ausführung des Geschäftsvorfalls pausiert werden. Nach der Rückmeldung der Freigabe über den zweiten Thread kann der Main-Thread dann fortsetzen. Ist wie gesagt noch nicht implementiert.

@danielr1996
Copy link
Contributor Author

Wie würde so eine Implementierung den Aussehen, ist das nur ein weitere Case in der HBCICallback Implementierung und das pollen einfach nur ein weiterer GV der über die Job Queue abgeschickt werden kann, oder muss man dafür tief in die Innereien von HBCI4J eintauchen?

Ich hab jetzt auf jeden Fall ne funktionierende Lösung mit der bisherigen Umsetzung, deswegen belass ich es erstmal dabei da ich nicht nochmal meinen Account sperren will weil ich zu oft eine Pin anfordere aber nicht bestätige :D

Sollen wir den Issue noch offen lassen falls jemand anders sich die selbe Frage stellt?

@willuhn
Copy link
Collaborator

willuhn commented Nov 9, 2022

Das Thema ist leider nicht einfach mit einem weiteren Callback umgesetzt. Wie ich schon schrieb: An der Stelle muss ein Multi-Threading eingebaut werden, um parallel in einem zweiten Thread HBCI-Nachrichten für das Status-Pollen senden zu können, während der Haupt-Thread wartet.

Ich lasse das Issue mal offen.

@willuhn willuhn changed the title Tan Callback difference between HBCI4J and official banking app Support für PushTAN 2.0 (Decoupled Verfahren) Nov 9, 2022
@DominikHolzapfel
Copy link

Hallo,
ich bin im Rahmen eines Tests auf dieses Problem gestoßen. Im Zuge dessen habe ich mir angeschaut, wie Banking4 von Subsembly dieses Problem löst.
Nachdem eine Transaktion angestoßen wird, wartet die Anwendung auf die Bestätigung des Nutzers (manuell per Knopfdruck), dass die Freigabe in der App erfolgt ist. Daraufhin wird ein Request mit einem HKTAN Request zum Server gesendet, um den Status der Transaktion zu prüfen. Sollte die Freigabe in der App tatsächlich erfolgt sein, geht der Flow weiter, ansonsten kommt derselbe Dialog einfach zurück und der Nutzer wird erneut aufgefordert, "Ok" zu drücken.

Ist mit so einem Vorgehen noch Multi-Threading notwendig? Oder wäre es mit expliziter Nutzer-Eingabe eventuell einfacher?

Ich kann auch gerne Beispiel Request/Response Paare zur Verfügung stellen, falls das hilft.

@willuhn
Copy link
Collaborator

willuhn commented Nov 27, 2023

Ja, möglicherweise würde es damit ohne separaten Thread im Hintergrund funktionieren.

@willuhn
Copy link
Collaborator

willuhn commented Jan 15, 2024

Hatte vergessen, das Ticket zu schliessen. Ist seit 22.12.2023 mit HBCI4Java 3.1.74 umgesetzt. Es gibt hierzu einen neuen Callback NEED_PT_DECOUPLED, der im HBCICallback implementiert werden muss. Dieser muss lediglich einen Warte-Dialog mit der Message der Bank anzeigen sowie einen OK-Button, auf den der User klicken soll, sobald er die Freigabe in der Push-TAN-App durchgeführt hat.

@willuhn willuhn closed this as completed Jan 15, 2024
@willuhn
Copy link
Collaborator

willuhn commented Jan 15, 2024

Für's Protokoll noch die damit verbundenen Commits:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants