2013-01-07 3 views
7

"Clash of Clans" verwendet das Game Center, um einen Spieler mit einem vorhandenen, ferngespeicherten Spielstatus zu authentifizieren und zu verknüpfen.Authentifizieren eines Game Center-Spielers auf den Servern eines Onlinespiels

Von dem, was ich sehen kann, ist ein Spiel nur eine Player-Kennung auf der Client-Seite zur Verfügung gestellt. Gibt es eine unterstützte Technik, um einen Benutzer sicher zu authentifizieren, anstatt nur den Bezeichner zu senden (was der Authentifizierung mit nur einem Benutzernamen entspricht)?

+1

Diese Frage hat die Antwort: http://stackoverflow.com/questions/15755489/setting-up-third-party-server-to-interact-with-game-center –

Antwort

0

Da Sie mit Ihrem eigenen Server authentifizieren, ist dies etwas zwischen Ihrem Client und Ihrem Server zu implementieren. Game Center kann dir nicht helfen.

Eine einfache Idee wäre, einen Hash von der playerID mit einer Funktion, die nur Sie kennen, zu berechnen und den Server zu vergleichen, was der Client sendet.

Vermeiden Sie die Generierung eines zufälligen Schlüssels, wenn Ihr Client zum ersten Mal ausgeführt wird, da der Benutzer bei der Neuinstallation des Clients gesperrt wird.

+0

In der Tat, das ist eine Möglichkeit, .. jemanden verlangsamen. Ein Jailbreak-Gerät kann leicht dazu gebracht werden, eine andere PlayerID zurückzugeben - genau aus diesem Grund frage ich nach etwas Sicherem. Und wenn man bedenkt, dass Spiele wie Clash of Clans Game Center-Account-assoziierte IAPs enthalten, ist sogar Geld gefährdet - und diese Sorge ist der Grund, warum ich gefragt habe. Klingt wie serverseitige Authentifizierung ist ein guter Kandidat für ein Radar: - / –

1

Seit ich die Frage gestellt habe, hat Apple eine neue API eingeführt und die Antwort ist verfügbar unter: Setting up third-party server to interact with Game Center (danke, user2949759) und an einigen anderen Orten.

Specifically, da iOS 7 (Apple documentation on Wayback Machine):

-[GKLocalPlayer generateIdentityVerificationSignatureWithCompletionHandler:]

Erzeugt eine Signatur, die von einem fremden Server ermöglicht die lokale Spieler zu authentifizieren.

Der entsprechende Callback-Block Argumente umfassen NSURL *publicKeyUrl, NSData *signature, NSData *salt, uint64_t timestamp. Diese sollten zusammen mit den Playern playerID und bundleID als "Anmeldeinformationen" an den Server gesendet werden.

  • An dieser Stelle sollte man, server verwenden publicKeyURL den öffentlichen Schlüssel
  • server zu erhalten, stellen Sie sicher, dass dieser öffentliche Schlüssel von Apple
  • server, verketten UTF-8-kodierten unterzeichnet playerID, bundleID, big-endian uint64 Zeitstempel und wörtlich salt
  • server erzeugen SHA-256 der oben digest
  • server zu erzeugen, verifizieren die signature, die an den Server geliefert wurden, korrekt ist, using die öffentlichen Schlüssel zuvor heruntergeladen hat, die signature und die digest

Es gibt eine example in pseudo-PHP, ein example of how one would implement this in Objective-C (was wenig Sinn zu verwenden wörtlich macht), ein Go implementation, ein Ruby implementation und Es gibt eine Reihe von Implementierungen in anderen Sprachen zu derselben Frage.

Es überrascht nicht, die Implementierung in Go scheint besonders lesbar, aber es überprüft nicht, dass der öffentliche Schlüssel von Apple ausgestellt wurde. Die verknüpfte Ruby-Implementierung enthält ein ziemlich klares Beispiel dafür.