Ios 验证在线游戏中的游戏中心玩家';s服务器

Ios 验证在线游戏中的游戏中心玩家';s服务器,ios,game-center,Ios,Game Center,“部族冲突”使用游戏中心对玩家进行身份验证并将其与现有远程存储的游戏状态链接 从我所看到的,一个游戏只在客户端提供了一个玩家标识符。是否有一种受支持的技术可以安全地对用户进行身份验证,而不是只发送标识符(这相当于只使用用户名进行身份验证)?由于您使用自己的服务器进行身份验证,这是您的客户机和服务器之间需要实现的事情。游戏中心将无法帮助您 一个简单的方法是使用一个只有您知道的函数,从playerID计算散列,并让服务器将其与客户端发送的内容进行比较 避免在客户端第一次运行时生成随机密钥,因为当客户

“部族冲突”使用游戏中心对玩家进行身份验证并将其与现有远程存储的游戏状态链接


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

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

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


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

自从我提出这个问题以来,苹果推出了一个新的API,答案可以在:(谢谢你,用户2949759)和其他一些地方找到

,自iOS 7()起:

-[GKLocalPlayer generateIdentityVerificationSignatureWithCompletionHandler::

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

相关回调块的参数包括
NSURL*publicKeyUrl
NSData*signature
NSData*salt
uint64\u t timestamp
。这些,连同玩家的
playerID
bundleID
,应该作为“登录信息”发送到服务器

  • 此时,应该在服务器端使用
    publicKeyURL
    来获取公钥
  • 服务器端,验证此公钥是否已由Apple签名
  • 服务器端,连接UTF-8编码的
    playerID
    bundleID
    ,big-endian
    uint64
    时间戳和逐字
    salt
  • 服务器端,生成上面的SHA-256以生成
    摘要
  • 服务器端,验证发送到服务器的
    签名
    是否正确、先前下载的公钥、签名和摘要
有一个,一个(逐字逐句地说是没有意义的),一个,还有一个在同一个问题上用其他语言实现的分类


毫不奇怪,Go中的实现看起来特别可读,但它没有验证公钥是由苹果发行的。LinkedRuby实现包含了一个非常清晰的例子,说明了如何做到这一点。

事实上,这是一种。。。让某人慢下来。越狱设备很容易被诱骗返回不同的playerID——这正是我要求更安全的设备的原因。考虑到像《家族冲突》这样的游戏包含与游戏中心账户相关的IAP,甚至还有资金风险——这就是我为什么要问的原因。听起来服务器端身份验证检查是雷达的一个很好的候选者:-/这个问题有答案: