「Clash of Clans」は、Game Centerを使用して、既存のリモートに保存されたゲーム状態のプレーヤーを認証してリンクします。オンラインゲームのサーバー上でGame Centerプレーヤーを認証する
私にはわかるように、ゲームにはクライアント側のプレーヤー識別子しか提供されていません。識別子だけを送信するのではなく、ユーザーを安全に認証する技術がサポートされていますか(これはユーザー名だけで認証するのと同じです)。
「Clash of Clans」は、Game Centerを使用して、既存のリモートに保存されたゲーム状態のプレーヤーを認証してリンクします。オンラインゲームのサーバー上でGame Centerプレーヤーを認証する
私にはわかるように、ゲームにはクライアント側のプレーヤー識別子しか提供されていません。識別子だけを送信するのではなく、ユーザーを安全に認証する技術がサポートされていますか(これはユーザー名だけで認証するのと同じです)。
独自のサーバーで認証しているため、クライアントとサーバーの間で実装する必要があります。ゲームセンターはあなたを助けることができません。
単純な考え方は、あなたが知っているだけの機能を使ってplayerID
からハッシュを計算し、サーバーがクライアントが送信しているものと比較することです。
クライアントの再インストール時にユーザーがロックアウトされるため、初めてクライアントを実行するときにランダムキーを生成しないようにしてください。
確かに、これは一つの方法です。誰かを遅くする。 jailbrokenされたデバイスは、別のplayerIDを返すように簡単に騙される可能性があります。これは私がより安全なものを求めている理由です。 Clash of ClansのようなゲームにはGame Centerアカウントに関連したIAPが含まれていると考えても、リスクがあります。サーバー側の認証チェックのようなサウンドは、レーダーにとっては良い候補です: - / –
私は質問して以来、Appleは新しいAPIを導入しました。回答はSetting up third-party server to interact with Game Center(ありがとう、user2949759)と他の場所で利用できます。 IOSの7(Apple documentation on Wayback Machine)以来
-[GKLocalPlayer generateIdentityVerificationSignatureWithCompletionHandler:]
ローカルプレーヤーを認証する第三者サーバを可能にする署名を生成します。
関連するコールバックブロックの引数はNSURL *publicKeyUrl
、NSData *signature
、NSData *salt
、uint64_t timestamp
が含まれます。これらは、プレーヤーのplayerID
およびbundleID
とともに、「ログイン情報」としてサーバーに出荷される必要があります。この時点で
publicKeyURL
を使用する必要がplayerID
、bundleID
、ビッグエンディアンuint64
タイムスタンプ、および逐語的salt
digest
signature
とexample in pseudo-PHPありますdigest
、example of how one would implement this in Objective-C(ほとんど意味をなさないそのまま使用する)、Go implementationusing正しいRuby implementationと同じ質問には他の言語の実装があります。
驚くべきことに、Goの実装は特に読みやすいようですが、公開鍵がAppleによって発行されたことは検証されません。リンクされたRubyの実装には、それを行う方法のかなり明確な例が含まれています。
この質問は答えを持っています:http://stackoverflow.com/questions/15755489/setting-up-third-party-server-to-interact-with-game-center –