设置第三方服务器以与Game Center交互

时间:2013-04-02 03:18:16

标签: ios authentication sinatra game-center

我正在考虑为我的iOS游戏添加一项功能,允许玩家创建自己的游戏关卡,与其他玩家分享,评分等等。有一个用户创建关卡的公共存储库,可排序按创建日期,评级,难度或其他标准。

这种功能需要第三方服务器。我在想我会使用Sinatra创建一个RESTful API并在Heroku上运行它。我的问题是:验证对此API的请求的最佳方法是什么?我宁愿不要求玩家创建用户名和密码。我想使用Game Center的ID系统。

有什么建议吗?我之前从未做过任何服务器端的事情,所以感谢任何帮助!

澄清

是的,我知道Apple不提供自己的系统。但它确实让开发人员可以访问唯一的游戏中心标识符(developer.apple.com/library/mac/#documentation/ ...),我希望我能以某种方式使用它来滚动我自己的身份验证系统,而无需用户通过Facebook登录/微博/等。如果可能的话。

4 个答案:

答案 0 :(得分:11)

从iOS 7看起来,这可以通过Game Center使用:

[localPlayer generateIdentityVerificationSignatureWithCompletionHandler]

使用generateIdentity调用验证播放器的身份后,

  • 将玩家ID与服务器上的用户db
  • 相关联
  • 使用REST框架为后续调用提供的任何访问令牌/身份验证模式

https://developer.apple.com/library/ios/documentation/GameKit/Reference/GKLocalPlayer_Ref/Reference/Reference.html

另外作为参考,这里是我们最终根据generateIdentityVerificationSignatureWithCompletionHandler的响应发送到我们服务器的字典

NSDictionary *paramsDict = @{
    @"publicKeyUrl":[publicKeyUrl absoluteString],
    @"timestamp":[NSString stringWithFormat:@"%llu", timestamp],
    @"signature":[signature base64EncodedStringWithOptions:0],
    @"salt":[salt base64EncodedStringWithOptions:0],
    @"playerID":localPlayer.playerID,
    @"bundleID":[[NSBundle mainBundle] bundleIdentifier]
};

答案 1 :(得分:4)

编辑:好像我发布此消息时没有来自Apple的官方解决方案,但现在有了。请参阅其他答案,或阅读纯粹的历史/向后兼容性兴趣。


Apple不提供任何类型的系统来使用Apple ID身份验证(包括Game Center)和第三方服务。您可以自行进行身份验证,但您可以通过Facebook / Twitter /等方式查看OAuth以进行单点登录。 (请注意,不是每个人都有Facebook / Twitter /等身份,或者他们想要为您的游戏使用的身份。)

理论上,playerID上的GKPlayer属性是唯一的,不变的,并且其他人都不知道。所以,从理论上讲,你可以将它用于“穷人的身份验证”:将它呈现给你的服务器,这就是所有服务器需要查找并提供特定于玩家的东西。但这就像是通过UDID进行身份验证,或仅通过用户名进行身份验证 - 它提供的唯一安全措施是默默无闻。当你的用户没有登录游戏中心时会发生什么?

答案 2 :(得分:2)

Andy的回答是正确的,但要完成这个故事:在他链接到的那些文档中,有一个解释说明如何对Apple服务实际验证GameCenter用户实际上是他声称的那个人。链接到该部分文档如下。基本上,客户端调用generateIdentityVerificationSignatureWithCompletionHandler会给出一些包含URL的数据。您将该数据和URL提供给您自己的服务器,然后从服务器获取该URL,以使用对generateIdentityVerificationSignatureWithCompletionHandler的调用提供的其余数据对用户进行身份验证。

https://developer.apple.com/library/ios/documentation/GameKit/Reference/GKLocalPlayer_Ref/index.html#//apple_ref/occ/instm/GKLocalPlayer/generateIdentityVerificationSignatureWithCompletionHandler

答案 3 :(得分:0)

我有一点时间搞清楚这一点。我终于使用了这个答案中的一些提示,其他一些SO答案,php文档和一些幸运的猜测来提出this complete answer.

注意:此方法似乎非常容易被黑客攻击,因为任何人都可以使用自己的证书签署他们想要的任何内容,然后将数据,签名和URL传递给服务器并返回"有效的GameCenter登录"回答这个,而这段代码"工作"在它实现GC算法的意义上,算法本身似乎存在缺陷。理想情况下,我们还会检查证书来自可信来源。对于检查它是Apple的游戏中心证书的超级偏执也会很好。