「Clash of Clans」使用Game Center對玩家進行身份驗證並將其與現有遠程存儲的遊戲狀態關聯起來。對在線遊戲服務器上的Game Center播放器進行身份驗證
從我所看到的情況來看,遊戲只在客戶端提供玩家標識符。是否有支持的技術來安全地認證用戶而不是隻發送標識符(這與使用用戶名進行認證相當)?
「Clash of Clans」使用Game Center對玩家進行身份驗證並將其與現有遠程存儲的遊戲狀態關聯起來。對在線遊戲服務器上的Game Center播放器進行身份驗證
從我所看到的情況來看,遊戲只在客戶端提供玩家標識符。是否有支持的技術來安全地認證用戶而不是隻發送標識符(這與使用用戶名進行認證相當)?
由於您使用自己的服務器進行身份驗證,因此您的客戶端和服務器之間需要執行此操作。 Game Center將無法爲您提供幫助。
一個簡單的想法是使用只有你知道的函數來計算來自playerID
的散列,並讓服務器將它與客戶端發送的內容進行比較。
當您的客戶端第一次運行時,請避免生成隨機密鑰,因爲當客戶端重新安裝時,用戶將被鎖定。
的確,這是一種方式.. ..減慢某人的速度。一個越獄設備可以很容易地被誘騙返回一個不同的playerID - 這正是我要求更安全的原因。考慮到像Clash of Clans這樣的遊戲包含與遊戲中心賬戶相關的IAP,甚至還有金錢風險 - 這也是我問及的原因。聽起來像服務器端驗證檢查是一個很好的雷達候選人: - / –
因爲我問了這個問題,Apple已經推出了一個新的API,可以在以下網址找到答案:Setting up third-party server to interact with Game Center(謝謝,user2949759)和其他一些地方。
Specifically,因爲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
和digest
有一個example in pseudo-PHP,一個example of how one would implement this in Objective-C(這意義不大逐字使用),一個Go implementation,一個Ruby implementation和在同一個問題上有其他語言的各種實現。
不出所料,Go中的實現看起來特別可讀,但並未驗證公鑰是由Apple發佈的。鏈接的Ruby實現包含一個相當明確的例子,說明如何做到這一點。
這個問題有答案:http://stackoverflow.com/questions/15755489/setting-up-third-party-server-to-interact-with-game-center –