7

《部落冲突》使用 Game Center 对玩家进行身份验证并将其链接到现有的远程存储游戏状态。

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

4

2 回答 2

2

自从我提出这个问题以来,Apple 已经引入了一个新的 API,并且可以在以下位置找到答案:设置第三方服务器以与 Game Center 交互(谢谢,user2949759)和其他一些地方。

具体来说,从 iOS 7(Wayback Machine 上的 Apple 文档)开始:

-[GKLocalPlayer generateIdentityVerificationSignatureWithCompletionHandler:]

生成允许第三方服务器对本地玩家进行身份验证的签名。

相关回调块的参数包括NSURL *publicKeyUrl, NSData *signature, NSData *salt, uint64_t timestamp. 这些以及玩家的playerIDbundleID应该作为“登录信息”发送到服务器。

  • 此时,服务器端应该使用publicKeyURL来获取公钥
  • 服务器端,验证此公钥是否已由 Apple 签名
  • 服务器端,连接 UTF-8 编码playerID、、bundleID大端uint64时间戳和逐字salt
  • 服务器端,生成上面的SHA-256来产生digest
  • 服务器端,使用之前下载的公钥验证signature发送到服务器的信息是否正确,以及signaturedigest

在 pseudo-PHP中有一个例子,一个如何在 Objective-C 中实现它的例子(这对逐字使用没有什么意义),一个Go 实现,一个Ruby 实现,还有其他语言的各种实现在同一问题。

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

于 2015-09-24T11:52:28.383 回答
0

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

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

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

于 2013-01-07T18:38:17.723 回答