14

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

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

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

澄清

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

4

4 回答 4

11

从 iOS 7 开始,Game Center 可以使用:

[localPlayer generateIdentityVerificationSignatureWithCompletionHandler]

一旦您使用 generateIdentity 调用验证了玩家的身份,

  • 将玩家 ID 与服务器数据库上的用户关联
  • 使用 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]
};
于 2013-12-16T19:56:45.280 回答
4

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


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

理论上,playerIDon 的属性GKPlayer是唯一的、恒定的,并且不为其他任何人所知。因此,理论上,您可以将其用于“穷人的身份验证”:将其呈现给您的服务器,这就是服务器需要查找并提供特定于玩家的东西的全部内容。但这就像通过 UDID 或仅通过用户名进行的身份验证——它提供的唯一安全性是模糊性。当您的用户未登录 Game Center 时会发生什么?

于 2013-04-02T05:40:35.077 回答
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

于 2015-08-05T17:41:03.627 回答
0

我花了很长时间才弄清楚这一点。我终于使用了这个答案的一些提示、其他几个 SO 答案、php 文档和一些幸运的猜测来得出这个完整的答案。

注意:这种方法似乎很容易被黑客入侵,因为任何人都可以用自己的证书签署任何他们想要的东西,然后将数据、签名和 URL 传递给服务器并返回“这是一个有效的 GameCenter 登录”的答案,所以,而这代码在实现 GC 算法的意义上“有效”,算法本身似乎有缺陷。理想情况下,我们还会检查证书是否来自受信任的来源。检查它是否是 Apple 的 Game Center 证书的额外偏执狂也很好。

于 2015-10-31T14:55:10.433 回答