Laden...

Wie baue ich ein Online-Anmeldesystem für ein Unity Game?

Erstellt von Michael1995 vor 3 Jahren Letzter Beitrag vor 3 Jahren 823 Views
M
Michael1995 Themenstarter:in
22 Beiträge seit 2020
vor 3 Jahren
Wie baue ich ein Online-Anmeldesystem für ein Unity Game?

Servus zusammen,

im Rahmen unseres Studienprojekts werden wir ein Multiplayer-Spiel (1v1) mit Unity erstellen.
Die erste UI + Spiellogik stehen und funktionieren soweit (Spiel gegen CPU, noch nicht Multiplayer).
Screens für Registrierung und Anmeldung sind auch in der UI schon erstellt.

Wie würdet ihr bezüglich dem User-Management vorgehen?

Meine Idee war es, hierfür eine Datenbank online anzulegen, die sämtlich Nutzerdaten speichert (Username, Passwort, Punktzahl, usw.) Was auch noch gleichzeitig eine coole Übung für Datenbanken wäre.
Habt ihr hier Erfahrungen über bestehende fertige Tools, oder macht es Sinn wirklich eine Datenbank mit den Infos der Nutzer anzulegen? Bedeutet das immensen Aufwand, oder ganz OK?
Also habe es mir für den Anfang so vorgestellt, dass man sich registriert, dann anmeldet, geprüft wird von der Anwendung, ob das ein gültiger Benutzer mit richtigem PW ist und dann man beispielsweise schon ein Singleplayer-Game mal starten kann. (PvP folgt dann noch).
(btw. später wollen wir den Multiplayer mit Server vom Mirror Networking laufen lassen)

Mit User-Management befassen wir uns gerade das erste Mal und im Internet gibt es dazu zig Infos, sodass man fast den Wald vor lauter Bäumen nicht sieht. Es wäre super, wenn hier jemand etwas zum Thema beitragen kann 🙂 Danke 😁 👍

16.835 Beiträge seit 2008
vor 3 Jahren

Das wichtigste Vorweg:

Egal ob es sich um eine kostenlose Anwendung handelt oder nicht: sobald Du mit Anmeldedaten umgehst bist Du sofort in der Situation Dich an geltendes Recht halten zu müssen.
Das heisst, dass Du Dich neben der Software mit den Gesetzen auseinander setzen darfst.
Die Strafen bei Verletzungen betrifft auch private Anwendungen; nicht nur kommerzielle!

Die Gesetze, zB der Datenschutz schreiben hier Dinge vor, wie Du etwas umsetzen muss. Teilweise genau, teilweise schwammig.
Das fängt bei der Art und Weise an, wie man einen Account validieren muss und geht soweit, dass es Vorschriften gibt, wie Du Passwörter speichern darfst / musst.

Meine Idee war es, hierfür eine Datenbank online anzulegen, die sämtlich Nutzerdaten speichert (Username, Passwort, Punktzahl, usw.) Was auch noch gleichzeitig eine coole Übung für Datenbanken wäre.

In dieser Formulierung eine ganz ganz ganz arg schlechte Idee.

Da Du mit Unity arbeitest, hast Du also eine Desktop-Anwendung. Du kannst Dich also nicht mit einer Online-Datenbank verbinden, weil eine Datenbank niemals direkt über das Internet erreichbar sein darf.
Vor allem eine Datenbank mit Credentials nicht.

Ein Login hat immer das Resultat, dass es danach eine Login-Session gibt; also eine Identifikation, dass ein Login erfolgt ist und der Kontext authentifiziert ist.
Bei Webanwendungen wird dies in einem Cookie abgespeichert.

Bei Desktop-Anwendungen kannst Du das in dieser Form nicht machen; weil es kein Cookie gibt.
Hier kommen Token zum Einsatz; JWT-Token.
In einem Id Token steht drin wer (Id, Name..) Du bist und in einem Access Token steht drin was Du darfst (Rechte etc).
Die Verfahren hier heissten OpenID sowie OAuth2.

Was Du brauchst ist also eine Authentifizierungsendestelle, die einen solchen Token ausstellt.
Das heisst:

  • Deine Credentials liegen in einer Datenbank, die nicht vom Internet direkt aus erreichbar sein darf
  • Du hast eine Webanwendung (API), die einen Login-Endpunkt zur Verfügung stellt und Token ausstellt
  • Du hast eine Client-Anwendung, die mit dem Login-Endpunkt spricht und dann den Token für die weiteren Aktionen verwendet.

So funktioniert quasi fast jedes Login-System heutzutage; vor allem über das Internet.

Habt ihr hier Erfahrungen über bestehende fertige Tools, oder macht es Sinn wirklich eine Datenbank mit den Infos der Nutzer anzulegen?

Klar, gibt tausende fertige Anwendungen, Services oder Frameworks dafür.
Microsoft, Google, Amazon und Co bieten alle solche Tools. Dazu viele Frameworks.

Bedeutet das immensen Aufwand, oder ganz OK?

Ich habe in den letzten Jahren viele Loginsysteme für Kunden gebaut, angebaut oder angeschlossen.
Ein Login-System muss gut geplant sein, weil es das Herz der Anwendung ist. Den Aufwand darf man nicht unterschätzen: vor allem muss man wissen was man macht, besonders, wenn man mit Credentials von fremden Leuten zutun hat.
Das ist einfach eine andere Verantwortung als eine Wetter-App.

Also habe es mir für den Anfang so vorgestellt, dass man sich registriert, dann anmeldet, geprüft wird von der Anwendung, ob das ein gültiger Benutzer mit richtigem PW ist und dann man beispielsweise schon ein Singleplayer-Game mal starten kann.

Damit beschreibst Du quasi die simple Sicht eines Anwenders: im Hintergrund ist das schon etwas mehr.

Mein Tipp

Wenn Du kein Plan hast, wie man ordentlich Passwörter speichert und darauf auch keine Lust hast, dann mach das nicht.
Das ist kein gutes Einstiegsthema 😉 Mach Dir das Leben einfacher und verzichte vollständig auf ein eigenes Loginsystem, wenn Du das nicht brauchst.

Biete den Leuten an, dass sie ihren Microsoft, Google, Facebook..... Account für den Login verwenden, dann kommst Du erst gar nicht in die Situation, dass Du Anmeldedaten verantworten musst oder verlieren kannst.

ASP.NET Core hat in der eingebauten Authentifizierung bereits solche externe Provider vorgesehen
Google external login setup in ASP.NET Core

Später, wenn Du eigene Rechte hast, dann kannst Du den Aufsatz ASP.NET Identity verwenden, um die User (ohne Credentials) in Deiner Anwendung zu speichern und entsprechend die Rechte in Deiner eigenen Umgebung zu nutzen.
Introduction to Identity on ASP.NET Core

Mit dieser Umsetzung kannst Du quasi ein vollwertiges Loginsystem bauen ohne, dass Du irgendwo die eigentlichen Credentials speichern musst.

Im ersten Schritt könntet ihr quasi einfach direkt aus Unity euch mit Google Authentifzieren und erst später den Weg, wenn notwendig mit ASP.NET Core gehen.
Den OAuth Flow, der für die App-Login-Lösung notwendig ist, nennt sich Device Flow.
Google OAuth 2.0 for Mobile & Desktop Apps

Aber: Du hast da sehr viel Lektüre vor Dir und eine steile Lernkurve.

M
Michael1995 Themenstarter:in
22 Beiträge seit 2020
vor 3 Jahren

Danke für deine sehr ausführliche Antwort!

Da Du mit Unity arbeitest, hast Du also eine Desktop-Anwendung. Du kannst Dich also nicht mit einer Online-Datenbank verbinden, weil eine Datenbank niemals direkt über das Internet erreichbar sein darf.

Es wird eine Android-App, sorry habe vergessen, das zu erwähnen. Die DB, wenn wir selbst eine machen, würden wir auf dem Uni-Server platzieren können. Natürlich ist die da "relativ" sicher und nicht öffentlich zugänglich, wir informieren uns hierzu noch.

Klar, gibt tausende fertige Anwendungen, Services oder Frameworks dafür.
Microsoft, Google, Amazon und Co bieten alle solche Tools. Dazu viele Frameworks.

Habe mich dazu vorab auch schon etwas informiert. Finde "Firebase" sehr, sehr interessant auf den ersten Blick, mal sehen, sagt dir das was?

Biete den Leuten an, dass sie ihren Microsoft, Google, Facebook..... Account für den Login verwenden, dann kommst Du erst gar nicht in die Situation, dass Du Anmeldedaten verantworten musst oder verlieren kannst.

Finde ich sehr interessant, sich z.B. mit Google einloggen zu können.

Vielen Dank für deinen Text, wir werden die Punkte mal durchgehen und dann weiterschauen. 👍

16.835 Beiträge seit 2008
vor 3 Jahren

Die DB, wenn wir selbst eine machen, würden wir auf dem Uni-Server platzieren können. Natürlich ist die da "relativ" sicher und nicht öffentlich zugänglich, wir informieren uns hierzu noch.

Völlig egal ob bei einem privaten Hoster, in der Uni oder in der Cloud: eine Datenbank exposed man nie!
In der Cloud hat man den Vorteil: es geht nicht mal. Die Anbieter verbieten das bei den Datenbank-Services - aus Sicherheitsgründen!

Geht nicht nur darum, dass es ein riesen Sicherheitsrisiko ist eine Datenbank dem Netzwerk / Internet verfügbar zu machen.
Du musst ja auch die DB-Credentials bei so einem Vorgehen im Client halten, was ein absolutes NoGo ist.

Damit bekommt jeder, der sich auskennt, Zugriff auf alle Inhalte des jeweiligen Benutzers.
Bei Deinem geplanten Vorgehen auf die Credentials-Tabelle!

Finde "Firebase" sehr, sehr interessant auf den ersten Blick, mal sehen, sagt dir das was?

Weit verbreitet im App Umfeld; ich hab damit nix am Hut.

Finde ich sehr interessant, sich z.B. mit Google einloggen zu können.

Vor allem überlässt Du damit die Verwaltung der sensiblen Daten dann den Profis.