Ich baue einen Poker-ähnlichen Spieleserver auf, ich wollte alle Anmeldungen und Spielelogiken auf einem Server verwalten, aber aus meinen Recherchen im Internet habe ich erfahren, dass dies nicht skalierbar ist und es sinnvoll wäre, es zu teilen die Arbeit in einen Login und Spieleserver. Was ich jedoch nicht bekomme, ist, nachdem ich die Authentifizierung auf dem Anmeldeserver durchgeführt und den Client eine neue Verbindung zum Spieleserver hergestellt habe. Woher weiß ich, welcher Client welcher ist? Müsste ich mich nicht erneut anmelden und damit den Zweck eines Servers für die Anmeldung zunichte machen? Gibt es eine Möglichkeit, eine Verbindung zwischen Prozessen und Maschinen herzustellen, von denen ich nichts weiß? Entschuldigen Sie mein kleines Wissen über Networking.
quelle
Antworten:
Obwohl Philipps Antwort vollkommen gut ist, gibt es einen etwas anderen Weg, der keine Verbindung zwischen dem Anmeldeserver und dem Spieleserver erfordert, was nützlich ist, wenn eine solche Verbindung schwierig ist.
Dies funktioniert, weil:
Einfacher ausgedrückt stellt der Hash sicher, dass es für den Absender nahezu unmöglich ist, sein Anmeldetoken gefälscht zu haben, sodass den Informationen im Token vertraut werden kann.
Verwenden Sie wie bei jedem sicherheitsorientierten Hashing die beste Hash-Funktion, die Sie erhalten können - im Moment scheinen die Leute bcrypt, PBKDF2 und scrypt zu mögen - und stellen Sie sicher, dass Ihr geheimer Schlüssel sehr lang ist, um die Brute-Force-Reproduktion weniger praktisch zu machen.
quelle
Nachdem sich der Benutzer beim Anmeldeserver authentifiziert hat, geben Sie ihm ein Token (eine eindeutige, zufällig generierte Zeichenfolge, die zu lang ist, um erraten zu werden).
Der Loginserver wählt einen Gameserver aus. Senden Sie das Token, den Benutzernamen und alle anderen relevanten Daten über den Benutzer vom Anmeldeserver an den ausgewählten Server.
Senden Sie das Token und den Hostnamen des Spieleservers an den Client. Trennen Sie es dann vom Anmeldeserver.
Der Client stellt dann mit seinem Benutzernamen und seinem Token eine Verbindung zum Spieleserver her.
Wenn das Token vom Client mit dem gerade vom Anmeldeserver gemeldeten übereinstimmt, akzeptieren Sie es.
Beachten Sie, dass die Token aus einem kryptografisch sicheren Zufallszahlengenerator erstellt werden müssen, damit dies sicher ist. Jedes Token kann vom Spieleserver nur einmal akzeptiert werden und nicht verwendete Token sollten nach einigen Minuten verworfen werden.
quelle