乍一看,用于 Firefox OS 的 Firefox Marketplace 可能与 Apple Store 或 Google Play Store 类似,但有一个关键区别:它不会将你锁定在 Mozilla 或你的 Firefox OS 手机中。**它允许你出售可在任何开放式 Web 设备上运行的 Web 应用程序,通过 receipt 协议**。非 Mozilla marketplace 可以通过实现收据格式,立即参与在 Firefox OS 上销售应用程序,用户在运行来自任何商店的付费应用程序时不会注意到任何区别。
当其他设备支持 receipt 协议时,理论上你只需为应用程序支付**一次**,并在**任何地方运行它**。当然,这里存在一个先有鸡还是先有蛋的问题,因此 Mozilla 希望成为帮助证明去中心化收据概念并迭代协议的“蛋”。Mozilla 邀请其他供应商帮助我们共同努力,使收据更加完善,以便付费应用程序尽可能地便携和“Web 化”。
面向开发者
每个付费应用程序都负有 验证其自身收据 的责任。如果你是一名开发者,正在考虑在 Firefox OS 上销售你的应用程序,这篇博文可以帮助你开始实现收据验证部分。这篇博文对于想要构建兼容 Web 运行时或兼容市场的人员来说也可能很有趣。
The navigator.mozApps JavaScript API 向你的应用程序公开设备收据。验证收据的最简单方法是包含一个客户端库,如 receiptverifier.js,并使用收据中找到的托管验证服务 URL。receiptverifier 文档详细介绍了这个过程,但它与在应用程序启动时调用以下 JavaScript 代码一样简单
mozmarket.receipts.Prompter({
storeURL: "https://marketplace.firefox.com/app/your-app",
supportHTML: 'email you@yourapp.com',
verify: true
});
就是这样!这是一个高级的快捷方式,如果收据丢失或无效,它还会在你的应用程序中显示一个屏幕提示。验证器文档展示了如何进行低级验证。
有关更完整的示例,你可以查看 Private Yacht 应用程序的代码,我们一直在测试中使用它。这个应用程序展示了如何使用 receiptverifier.js 库进行客户端检查,以及通过 Node.js 进行服务器端检查。我们还有一个 Python 库(以及专门针对 Django 的一个库),你可以在服务器上使用它来检查收据。
它是如何工作的?每个收据都是对 JSON Web Tokens 的混合使用。其中一个属性是链接到一个托管验证服务,你可以使用它来检查收据。你还可以选择离线验证收据,但这需要定期密钥同步,而且像退款和重新发行处理之类的某些细节对于离线验证来说还没有得到很好的支持。
默认情况下,收据只能源自应用程序 manifest 中 installs_allowed_from 参数中的其中一个商店 URL。作为开发者,你将与每个市场建立明确的支付关系,因此你将希望限制谁可以声称销售你的应用程序。这充当了可以为你的应用程序提供收据的实体的白名单。由于客户端 JavaScript 的松散性质,你可以通过在服务器端(即在自己的应用程序服务器上)验证收据来更严格地控制此白名单。
Firefox Marketplace 的付费应用程序尚未完全上线,但很快就会上线。如果你现在将收据检查器集成到你的应用程序中,那么当提交流程支持付款时,你就准备好了。
欺诈保护
让 Web 上的任何人都能销售应用程序对于 Mozilla 的开放式 Web 应用程序愿景至关重要。然而,在充分保护应用程序资产(不使用 DRM)的同时使收据去中心化是一项挑战。目前,用户可以在其客户端中使用一些攻击手段,例如 DNS 代理,来访问付费应用程序,但通过 CSP、CORS 和 HSTS(仅举几例),可以减轻这种攻击。如今的付费 iOS/Android 应用程序的现状实际上与之 没有太大区别。目前有一个公开问题将帮助 使市场白名单更有效,随着越来越多的开发者和商店参与,Mozilla 预计会进一步改进该系统。切换到已签名的 打包应用程序 也可能提供另一层资产保护,但这主要是为了解决权限问题而设计的。
与往常一样,如果你遇到问题,请提交错误报告!如果这是一个 Apps 平台错误,请选择 Core(组件:DOM: Apps),或者选择 Marketplace(组件:Payments/Refunds)。
关于 Robert Nyman [编辑名誉退休]
Mozilla Hacks 的技术布道者和编辑。发表关于 HTML5、JavaScript 和开放式 Web 的演讲和博客。Robert 是 HTML5 和开放式 Web 的坚定支持者,自 1999 年起就开始从事 Web 前端开发工作,在瑞典和纽约市都有工作经历。他还定期在 http://robertnyman.com 上发表博客,喜欢旅行和结识新朋友。
23 条评论