iTunes 应用内购买收据验证 - 模糊 JSON

Posted

技术标签:

【中文标题】iTunes 应用内购买收据验证 - 模糊 JSON【英文标题】:iTunes in-app purchase receipt verification - obscure-JSON 【发布时间】:2014-02-10 16:19:08 【问题描述】:

这个问题与AppStore in-App Purchase Receipt Verification Issues

有关

简而言之 - 来自 iTunes 的收据数据以奇怪的 JSON 格式编码,没有任何规范。接受的答案表明不需要对其进行解码,它必须只是发送到 iTunes。

在我的情况下,我想解码该数据以确保bundle_id 参数等于我的应用程序bundle_idhttps://buy.itunes.apple.com/verifyReceipt 方法将收据视为有效,即使它不是为我的应用程序生成的 - 所以如果黑客将从其他应用程序发送有效的收据到我的服务器 - 他很成功。

问题在于如何正确地进行此类验证,iTunes 开发人员肯定不打算采取额外的步骤(否则他们不会使用伪 JSON),但我认为保护免受此类攻击是必要的。 对此有什么想法吗?

【问题讨论】:

【参考方案1】:

Gill,您应该考虑到您正在验证的收据数据是不透明的,而不是试图解释它。将其发送到 Apple 的 verifyReceipt 服务并检查响应。这将是一个非奇怪的 JSON 对象。如果“状态”字段为 0,则 Apple 将其视为有效收据,但由您的服务器应用程序确定它是否在有效上下文中使用。为此,您可以检查“receipt”对象,您可以在其中找到捆绑和产品 ID 以及许多其他内容。

如果您决定在发送给 Apple 之前对收据数据进行一些预验证,您也可以通过一些额外的努力来做到这一点。它是一个 base64 编码的 JSON 对象,包含另外两个 base64 编码的对象,其中一个是如上所述的收据数据。这种方法的问题是数据不打算由 Apple 服务用户检查,因此如有更改,恕不另行通知。然而,它可能是一种有用的调试技术。

【讨论】:

【参考方案2】:

如果您使用的是 ios7,您可以使用设备上的方法进行收据验证,包括 bundle_id 验证。看看--iOS InApp Purchase Receipt Validation iOS 7 和A complete solution to LOCALLY validate an in-app receipts and bundle receipts on iOS 7。我假设您是在谈论设备上的验证,而不是使用您自己的服务器来处理验证。

【讨论】:

以上是关于iTunes 应用内购买收据验证 - 模糊 JSON的主要内容,如果未能解决你的问题,请参考以下文章

应用内购买验证收据错误

Apple 应用内购买验证收据返回 xml

iOS 测试应用收据验证

iOS中应用内购买的服务器端验证最佳实践

iOS 7:应用内购买收据验证和验证

iOS:React Native:应用内购买:收据验证