【问题标题】:Validate App Store Receipt: Local vs Server验证 App Store 收据:本地与服务器
【发布时间】:2020-05-05 23:54:14
【问题描述】:

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

苹果说:

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

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

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

【问题讨论】:

  • 这样更好,因为你的应用和你的服务器之间的实现是独一无二的;因此,逆向工程需要更多的工作。您还可以通过与服务器的通信构建额外的加密或验证。最终它仍然可以被打破,但它更难
  • 那么应用程序特定的共享密钥(您从 Apple 的 iTunes Connect 获得)是否应该仅驻留在我的服务器上?
  • 当然。你的应用中不应该有任何秘密,因为它们很容易暴露
  • 这是有道理的。如果没有中间服务器,共享密钥必须在应用程序中的某个地方才能与 Apple 的收据服务器直接通信。谢谢!

标签: ios app-store receipt-validation


【解决方案1】:

不应该发回具有有效/无效结果的响应。您应该考虑订阅好处来构建您的 API 架构:后端决定客户端应用程序将拥有哪些内容。

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

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

【讨论】:

    猜你喜欢
    • 2014-05-22
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多