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

Best Practice Strong-Authentication #417

Open
luggesexe opened this issue Dec 2, 2023 · 5 comments
Open

Best Practice Strong-Authentication #417

luggesexe opened this issue Dec 2, 2023 · 5 comments

Comments

@luggesexe
Copy link

Hallo,
ich implementiere hier grade die Library für Web und einen gleichzeitig laufenden Cronjob.
Die Erklärung unter login.php habe ich gelesen, frage mich aber wie hier die Best Practices sind bzw. wie das hier in der Runde so umgesetzt wird.
Das Problem welches ich hier sehe ist, wenn der Cronjob die handleStrongAuth-Function aufruft gibts alle 5 Minuten eine Push-Nachricht aufs Handy, im Fall der Fälle die ganze Nacht durch.

Meine Idee wäre ja gewesen die Ausgabe von $getSepaAccounts = \Fhp\Action\GetSEPAAccounts::create(); zu speichern und dann auf einer anderen Seite die handleStrongAuth Funktion mit dem Wert aufzurufen (den Plan habe ich verworfen, die Funktion erzeugt keinen eindeutigen mit der Bank ausgemachten Wert wie ich es zuvor dachte.
Problem: Web und Cron greifen auf die gleichen Funktionen zu. Trennen geht ja aber auch schlecht, auch der Cron braucht ggf. alle 90 Tage die Autorisierung und sollte nicht stumm weiterlaufen.

Wie löst man einen solchen Konflikt Best Practice am besten?

@ampaze
Copy link
Contributor

ampaze commented Dec 7, 2023

Da es immer eine TAN beim Login geben kann, ist ein Cronjob eigentlich ungeeignet. Wenn Cronjob dann müsste er sich selbst selbst stilllegen sobald die Bank nach einer TAN gefragt hat.

Wir haben es so gelöst, dass der Abruf händisch ausgeführt wird und der Mitarbeiter ggf. die TAN eingeben kann. Es ist imho eigentlich egal ob man die Nacht hindurch alle 5 Minuten abruft oder einmal morgens. Zumindest wenn es um eingehende Überweisungen geht kann man eine 100% automatische Verarbeitung der Umsätze sowieso vergessen.

@fbett
Copy link
Contributor

fbett commented Dec 8, 2023

Wir lassen auch einen Cronjob laufen und sobald ein Tan benötigt wird, wird der Cronjob angehalten (damit nicht alle X mins eine Push-Nachricht versendet wird).

Es gibt bei der normalen Abfrage der Bankdaten zwei Punkte an denen ein Tan benötigt werden könnte:

$loginAction = $connector->login();
if($loginAction->needsTan()) {
     // Stop it and send a message
}

und später

$getSepaAccountsAction = \Fhp\Action\GetSEPAAccounts::create();
$connector->execute($getSepaAccountsAction);
if($getSepaAccountsAction->needsTan()) {
    // Stop it and send a message
}

@lukas-staab
Copy link
Contributor

Ein Hinweis vielleicht noch: wenn man nur die Täglichen Umsätze abrufen will (oder die der Woche) braucht man bei den Umsätzen eigentlich keine Tan. Beim Login aber gesichert alle 90 Tage. Wenn man also Hochfrequent genug abruft, und sicherstellt das man sich immer mal Manuell einloggt ist man einigermaßen auf der sicheren Seite. Bei meiner Bank ist es wohl auch egal ob ich mich ins online Banking einlogge, oder via cmd. Beides geht auf den selben Counter mit dem Account.

@luggesexe
Copy link
Author

Dankeschön für eure Hinweise und Ideen. Ich stoppe den Cronjob entsprechend.
@lukas-staab ich habe mir das StuFis-Projekt mal angesehen in dem ja auch die FinTS-Bibliothek eingerichtet ist. Ich habe nicht ganz erkennen können.

(a) findet nach dem Schlosssymbol bei hinterlegtem TAN-Modus der gesamte Prozess auf einer Seite statt, sollte eine TAN mit NeedsTanException benötigt werden?
(b) Wie handhabt ihr keine benötigte TAN? Ist dann ein klick auf das Icon nicht möglich oder erscheint dann eine Erfolgsmeldung z.B.?

Beides ließ sich in der DEMO-Instanz nicht ganz nachvollziehen, ich würde das ganze dann in dem Symfony-Projekt ähnlich handhaben.

@lukas-staab
Copy link
Contributor

lukas-staab commented Dec 18, 2023

Eins vorab: ich bin nicht ganz sicher ob ich den Code so wieder schreiben würde, ich finde ihn etwas unübersichtlich aber ich war froh das es funktioniert hat :)

a) Ich hab es so gelöst das die Tan Exception nur dann geworfen wird wenn man eine braucht und dann auch das entsprechende Template gerendert wird. b) Ansonsten läuft es einfach durch und man kommt da an wo man wollte.

In der Demo Instanz ist das nicht gemockt, entsprechend müsste man Echte Daten eingeben, da das eine öffentliche Demo Instanz ist würde ich davon aber eher abraten ...

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

4 participants