“部落冲突”使用游戏中心对玩家进行身份验证,并将玩家与现有的远程存储的游戏状态联系起来。
据我所知,游戏只在客户端提供了一个玩家标识符。是否有一种受支持的技术可以安全地对用户进行身份验证,而不是只发送标识符(这等同于仅使用用户名进行身份验证)?
发布于 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 *publicKeyUrl、NSData *signature、NSData *salt、uint64_t timestamp。这些,连同播放器的playerID和bundleID,应该作为“登录信息”发送到服务器。
在这一点上,服务器端应该使用key
playerID、bundleID、big-endian uint64时间戳和verbatim digest生成上面的
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实现包含了一个相当清晰的例子来说明如何做到这一点。
发布于 2013-01-08 02:38:18
由于您使用自己的服务器进行身份验证,因此这是您的客户端和服务器之间要实现的东西。游戏中心将无法帮助您。
一个简单的想法是使用只有您知道的函数从playerID计算散列,并让服务器将其与客户端发送的内容进行比较。
避免在客户端第一次运行时生成随机密钥,因为当重新安装客户端时,用户将被锁定。
https://stackoverflow.com/questions/14201700
复制相似问题