验证 App Store 收据:本地与服务器

Validate App Store Receipt: Local vs Server

这适用于 tvOS,但同样适用于 iOS。这涉及应用内购买订阅(自动续订)。

Apple 说:

警告 不要从您的应用调用 App Store 服务器 verifyReceipt 端点。 您无法在用户的设备和 App Store 直接,因为你不控制它的任何一端 连接,这使得它容易受到中间人攻击。

如果我使用自己的服务器,中间人如何更难做到?我的服务器会将收据发送给 Apple,获取所有内部字段作为响应,但最终必须将 valid/invalid 响应发送回我的应用程序,任何人都可以使用中间人系统伪造。

那么为什么使用中间服务器会好得多?

不应该发回 valid/invalid 结果的响应。您应该构建您的 API 架构,考虑到订阅的好处:后端决定客户端应用程序将包含哪些内容。

例如,您有一个带有视频库的应用。有些视频是免费的,有些则需要订阅才能获得。后端必须发送 json,其中每个视频都有一个标志 isAvailable (true/false)。如果内容可用,json 将有 URL 可供播放。否则,对于非订阅用户,JSON 中没有任何 URL,他只能选择订阅。

只有后端验证订阅收据并决定用户获得多少内容。客户端对用户的订阅一无所知,仅依赖于来自服务器的 JSON。 如果有人试图破解你,他们将在没有订阅的情况下一无所获。 此外,您可以使用 SSL 固定来防止中间人攻击(当然,这不是最终解决方案,但可以让黑客的生活更加艰难)。