2013-01-07 25 views
7

「Clash of Clans」は、Game Centerを使用して、既存のリモートに保存されたゲーム状態のプレーヤーを認証してリンクします。オンラインゲームのサーバー上でGame Centerプレーヤーを認証する

私にはわかるように、ゲームにはクライアント側のプレーヤー識別子しか提供されていません。識別子だけを送信するのではなく、ユーザーを安全に認証する技術がサポートされていますか(これはユーザー名だけで認証するのと同じです)。

+1

この質問は答えを持っています:http://stackoverflow.com/questions/15755489/setting-up-third-party-server-to-interact-with-game-center –

答えて

0

独自のサーバーで認証しているため、クライアントとサーバーの間で実装する必要があります。ゲームセンターはあなたを助けることができません。

単純な考え方は、あなたが知っているだけの機能を使ってplayerIDからハッシュを計算し、サーバーがクライアントが送信しているものと比較することです。

クライアントの再インストール時にユーザーがロックアウトされるため、初めてクライアントを実行するときにランダムキーを生成しないようにしてください。

+0

確かに、これは一つの方法です。誰かを遅くする。 jailbrokenされたデバイスは、別のplayerIDを返すように簡単に騙される可能性があります。これは私がより安全なものを求めている理由です。 Clash of ClansのようなゲームにはGame Centerアカウントに関連したIAPが含まれていると考えても、リスクがあります。サーバー側の認証チェックのようなサウンドは、レーダーにとっては良い候補です: - / –

1

私は質問して以来、Appleは新しいAPIを導入しました。回答はSetting up third-party server to interact with Game Center(ありがとう、user2949759)と他の場所で利用できます。 IOSの7(Apple documentation on Wayback Machine)以来

Specifically

-[GKLocalPlayer generateIdentityVerificationSignatureWithCompletionHandler:]

ローカルプレーヤーを認証する第三者サーバを可能にする署名を生成します。

関連するコールバックブロックの引数はNSURL *publicKeyUrlNSData *signatureNSData *saltuint64_t timestampが含まれます。これらは、プレーヤーのplayerIDおよびbundleIDとともに、「ログイン情報」としてサーバーに出荷される必要があります。この時点で

  • 、一つは、サーバー側は、CONCATENATE UTF-8でエンコードされ、この公開鍵は、Appleによって
  • サーバー側の署名されたことを確認し、公開鍵
  • サーバー側を取得するためにpublicKeyURLを使用する必要がplayerIDbundleID、ビッグエンディアンuint64タイムスタンプ、および逐語的salt
  • サーバサイド、を確認、SHA-256上記のがdigest
  • サーバサイドを生成する生成サーバーに出荷されたは、先にダウンロードした公開鍵、signatureexample in pseudo-PHPありますdigest

example of how one would implement this in Objective-C(ほとんど意味をなさないそのまま使用する)、Go implementationusing正しいRuby implementationと同じ質問には他の言語の実装があります。

驚くべきことに、Goの実装は特に読みやすいようですが、公開鍵がAppleによって発行されたことは検証されません。リンクされたRubyの実装には、それを行う方法のかなり明確な例が含まれています。

関連する問題