2013-01-07 65 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

由於您使用自己的服務器進行身份驗證,因此您的客戶端和服務器之間需要執行此操作。 Game Center將無法爲您提供幫助。

一個簡單的想法是使用只有你知道的函數來計算來自playerID的散列,並讓服務器將它與客戶端發送的內容進行比較。

當您的客戶端第一次運行時,請避免生成隨機密鑰,因爲當客戶端重新安裝時,用戶將被鎖定。

+0

的確,這是一種方式.. ..減慢某人的速度。一個越獄設備可以很容易地被誘騙返回一個不同的playerID - 這正是我要求更安全的原因。考慮到像Clash of Clans這樣的遊戲包含與遊戲中心賬戶相關的IAP,甚至還有金錢風險 - 這也是我問及的原因。聽起來像服務器端驗證檢查是一個很好的雷達候選人: - / –

1

因爲我問了這個問題,Apple已經推出了一個新的API,可以在以下網址找到答案:Setting up third-party server to interact with Game Center(謝謝,user2949759)和其他一些地方。

Specifically,因爲iOS的7(Apple documentation on Wayback Machine):

-[GKLocalPlayer generateIdentityVerificationSignatureWithCompletionHandler:]

生成一個簽名,它允許第三方服務器進行身份驗證的本地播放器。

相關的回調塊的參數包括NSURL *publicKeyUrlNSData *signatureNSData *saltuint64_t timestamp。這些以及玩家的playerIDbundleID應作爲「登錄信息」運送到服務器。

  • 在這一點上,我們應該,服務器端,使用publicKeyURL獲得公鑰
  • 服務器端,驗證此公鑰是由蘋果公司簽署
  • 服務器端,連擊UTF-8編碼playerIDbundleID,大端uint64時間戳,和逐字salt
  • 服務器端,生成SHA-256以上的,以產生digest
  • 服務器端,驗證這是運到服務器是正確的,using先前下載的公鑰,signaturedigest

有一個example in pseudo-PHP,一個example of how one would implement this in Objective-C(這意義不大逐字使用),一個Go implementation,一個Ruby implementation和在同一個問題上有其他語言的各種實現。

不出所料,Go中的實現看起來特別可讀,但並未驗證公鑰是由Apple發佈的。鏈接的Ruby實現包含一個相當明確的例子,說明如何做到這一點。

相關問題