Wie werden Accounts programmiert wenn es um banking-Systeme/-Apps/-Programme geht?
Da ich selbst eine Finanz-App programmieren will, aber ich mich nich so genau mit Account-Programmierung (vorallem mit online-Guthaben/-Bankkonto) auskenne würde ich gerne wissen, welche tools man dafür verwendet bzw. wie man diese Konten generrell in eine App einbringt (Ich will mir ein Beispiel an PayPal nehmen).
1 Antwort
Ziemlich komplex ;)
Generell - da Du Anfänger zu sein scheinst - solltest Du nicht damit rechnen, halbwegs zeitnah einen zumindest grob funktionierenden Stand zu erreichen.
Und wenn Du tatsächlich Geld von Menschen verwalten willst (wie eine Bank), musst Du sehr strenge Gesetze einhalten - ganz abgesehen davon, dass Du erst einmal die Erlaubnis vom Staat brauchst.
Entscheidend ist natürlich, was Du erreichen willst, wenn Du von PayPal redest, klingt das erst einmal ziemlich krass und definitiv too much für dich.
Verstehe, geht das auch ohne server (Cloud?)?
Nein.
Naja, irgendwie vielleicht schon, die Apps müssten sich dann ständig über sämtliche Neuerungen informieren (z.B. wenn man sich persönlich begegnet). Das hätte aber 'ne Menge Nachteile und wäre vermutlich komplexer, als eine zentralisierte (mit Server) Variante.
Grob zusammengefasst:
Du brauchst einen Server, der alle Account-Zugriffe organisiert, hierfür bietet sich eine REST-API an. Natürlich ist diese REST-API der einzige Weg, wie die App irgendwie an irgendwelche Daten kommt. Dahinter steht eine Datenbank, in der die Nutzer-Daten, Passwort-Hashes, Security-Keys, etc. gespeichert sind.
Die App selber arbeitet dann mit dieser REST-API, fragt das Passwort ab, berechnet den Hash, schickt ihn zum Server, der wiederum die Anmeldung durchführt und ggf. mit Nutzer-Daten antwortet.
Die Anmeldung selber ist im Grunde recht einfach, der Server prüft den mitgeschickten Hash, schaut, ob er Email und Hash in der Datenbank findet und antwortet ggf. mit Nutzer-Daten.
Lustig wird es, wenn dir dich fragst, wie Du dir merken sollst, dass der Nutzer angemeldet ist, denn das geht nicht ;) Für sowas gibt es mehrere Konzepte, z.B. JWT: Der Server generiert einen signierten Token mit einigen Daten (Nutzer-Daten, Ausstellungszeitpunkt, Berechtigungen, etc.) und antwortet ihn zum Client. Der Client verwendet danach immer diesen Token und der Server kann ihn dank der Signatur überprüfen und anhand der Inhalte bestimmen, ob der Client noch Berechtigungen hat. Wenn der Nutzer keine Berechtigungen mehr hat (z.B. weil der Token zu alt war), muss er sich erneut einloggen.
OAuth ist z.B. ein Protokoll, was das ganze Thema auf die Spitze treibt. Damit könntest Du einen dezentralen Anmelde-Server entwickeln, den dann zig verschiedene Websites oder Apps nutzen und sie alle teilen die gleiche Anmelde-Session.
Soweit so gut, nur selber entwickeln ist meistens eine sehr bescheuerte Idee.
Du magst vielleicht denken, dass das komplex ist - es ist noch sehr einfach beschrieben ;) Und ich behaupte nicht, dass ich das kann - kann ich nicht, will ich auch gar nicht.
Für die meisten Programmiersprachen sollte es aber Frameworks geben, die das schon implementiert haben.
Z.B. kenne ich für C# diese Frameworks:
- ASP.NET: Für REST-APIs
- ASP.NET Identity: Für Nutzer-Verwaltung und Authentifizierung
- Identity Server: OAuth und OpenId Implementierung für ASP.NET
- Refit: Einfache Nutzung von REST-APIs
Damit ist die Aufgabe zumindest realistisch, da ASP.NET echt gut ist.
Aber dennoch ist es schwierig, besonders da diese Frameworks komplex sind und dein Ziel immer noch ein sehr komplexes Vorhaben ist.