Chrome网上应用店中特定于用户的扩展程序版本

时间:2012-08-06 10:06:42

标签: google-chrome-extension chrome-web-store

我一直在为我的公司开发和维护Chrome扩展程序,每个客户都会在代码中分配一个唯一的ID。我们一直在使用该ID来确定许可证状态并登录我们的服务(带有每月订阅费的付费扩展)。

到目前为止,我们自己托管了扩展文件,并为每个客户扩展程序提供了唯一的更新URL。这很好,很简单;转到我们的网站,点击安装,你就完成了。然而,在最新的Chrome版本中,Google的安装程序受到了阻碍,因为他们现在要求用户通过将CRX文件拖放到chrome:// chrome / extensions / tab中来安装扩展程序。除非您的扩展程序可以通过Chrome网上应用店获得 - 这可以解决问题:

  • 我们不希望拖放CRX安装 - 需要网上商店。
  • 我们不希望网上商店有多个版本的扩展程序(每个客户一个版本),因为每次我们更新扩展程序时都是维护地狱。
  • 我们不想使用网上应用店许可,因为:
    • 需要OpenID登录。
    • 我们将扩展部分出售给有学生支付账单的学生,而不是学生。
    • 我们不希望将付款方式锁定到一个浏览器,即我们希望能够通过我们或服务器维护许可和付款。
  • 我们不希望让用户输入许可证密钥,因为几千名学生必须输入密钥的风险太高 - 它还需要某种存储(cookies / localStorage),最终会被清除要再次输入的许可证密钥。

我并非100%确定我的陈述是完全正确的,所以如果我错过了什么,请随时启发我。

如果是,问题是我们是否可以通过网上商店(使用唯一ID)以某种方式为每个客户定制扩展,而无需为每个ID发布一个扩展名?

作为一个附带问题,任何可能用另一种方法解决问题的答案也将被接受。

1 个答案:

答案 0 :(得分:2)

对于下面的答案,我假设您的应用是打包应用,而不是托管应用。

我的解决方案与您当前的实施方案非常相似,但为用户添加了一个额外的步骤。对于学生用户,该过程将如下工作:

  1. 从网上应用店下载该应用。该应用程序尚未运行,启动它只会显示“请点击您学校/机构提供的激活链接”消息。
  2. 点击您的服务器上托管的链接(即您用来托管更新网址的服务器),该链接看起来像https://myserver.com/activateapp.php?custid=123456789。您为每个支持的机构托管一个这样的链接,并且机构的工作是为其学生提供其链接。此链接可激活该应用。
  3. 从实施的角度来看,这是它的工作原理:

    1. 在您的服务器上托管一个页面https://myserver.com/activateapp.php。在服务器端,检查custid参数是否有效。如果不是,请发送404错误。
    2. 您的应用有一个注入https://myserver.com/activateapp.php的内容脚本,用于扫描URL并选择客户ID。应用找到ID后,会将其存储在localStorage中。由于无效的客户ID产生404错误,您知道当内容脚本运行时,该页面不是404错误;因此,它正在读取有效的客户ID。
    3. 只要应用想要查询您的服务,它就会检查它是否在localStorage中有客户ID。如果是,则使用该ID;如果没有,则会显示一条消息,表明该应用尚未激活。打包的应用程序将永远不会删除localStorage,除非您的应用程序被编程为擦除自己的存储,或者用户从控制台执行此操作。存储擦除永远不会“意外”发生。即使是最强大的浏览器范围内的数据/缓存清除也只会从网页中清除localStorage,而不是从应用和扩展程序清除。
    4. 为了提高安全性 - 如果您不希望人们随机猜测客户ID,您可以添加额外的签名参数,例如https://myserver.com/activateapp.php?custid=123456789&sig=2464509243。这个额外的参数是一些服务器验证的客户ID转换(理想情况下是加密签名或与数据库中的ID相关联的纯随机值),任何人都无法猜测。当activateapp.php的请求命中服务器时,它会检查有效的客户ID 是否有效的相应签名。当然,这并不能阻止合法访问有效链接的人与未经授权的人共享链接,但我认为这是旧系统中存在的漏洞。