首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证在线游戏服务器上的游戏中心玩家

验证在线游戏服务器上的游戏中心玩家
EN

Stack Overflow用户
提问于 2013-01-08 02:19:26
回答 2查看 2.3K关注 0票数 7

“部落冲突”使用游戏中心对玩家进行身份验证,并将玩家与现有的远程存储的游戏状态联系起来。

据我所知,游戏只在客户端提供了一个玩家标识符。是否有一种受支持的技术可以安全地对用户进行身份验证,而不是只发送标识符(这等同于仅使用用户名进行身份验证)?

EN

回答 2

Stack Overflow用户

发布于 2015-09-24 19:52:28

自从我提出这个问题以来,苹果已经引入了一个新的应用程序接口,答案可以在: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,应该作为“登录信息”发送到服务器。

在这一点上,服务器端应该使用key

  • serverside,来获取公共key

  • serverside,验证此公共密钥是否已由Apple

  • serverside,签名连接UTF-8编码的playerIDbundleID、big-endian uint64时间戳和verbatim digest

生成上面的

  • 以生成SHA-256验证发送到服务器的signature是否正确,using早先下载的公共密钥、signature和SHA

有一个example in pseudo-PHP,一个example of how one would implement this in Objective-C (逐字使用没有什么意义),一个Go implementation,一个Ruby implementation,还有关于这个问题的各种其他语言的实现。

不出所料,Go中的实现似乎特别具有可读性,但它不能验证公钥是否是由Apple发布的。链接的Ruby实现包含了一个相当清晰的例子来说明如何做到这一点。

票数 2
EN

Stack Overflow用户

发布于 2013-01-08 02:38:18

由于您使用自己的服务器进行身份验证,因此这是您的客户端和服务器之间要实现的东西。游戏中心将无法帮助您。

一个简单的想法是使用只有您知道的函数从playerID计算散列,并让服务器将其与客户端发送的内容进行比较。

避免在客户端第一次运行时生成随机密钥,因为当重新安装客户端时,用户将被锁定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14201700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档