google-chrome-extension – Chrome网上应用店中特定于用户的扩展程序版本

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

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

>我们不希望拖放CRX安装 – 需要Web Store.
>我们不希望Web Store上有多个版本的扩展(每个客户一个),因为每次我们更新扩展时都是一个维护地狱.
>我们不想使用Web Store许可,因为:

>它需要OpenID登录.
>我们将扩展部分出售给有学生支付账单的学生,而不是学生.
>我们不想将我们的付款方式锁定到一个浏览器,即我们希望能够通过我们或服务器维护许可和付款.

>我们不希望让用户输入许可证密钥,因为几千名学生不得不输入密钥的风险太高 – 它还需要某种存储(cookies / localStorage),最终会被清除,需要许可证键再次输入.

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

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

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

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

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

>从网上应用店下载应用程序.该应用程序尚未运行,启动它只显示“请点击您学校/机构提供的激活链接”消息.
>单击服务器上托管的链接(即用于托管更新URL的服务器),该链接类似于https://myserver.com/activateapp.php?custid=123456789.您为每个支持的机构托管一个这样的链接,并且机构的工作是为其学生提供其链接.此链接可激活该应用.

从实现的角度来看,这是它的工作原理:

>在您的服务器上托管一个页面,https://myserver.com/activateapp.php.在服务器端,检查custid参数是否有效.如果不是,请发送404错误.
>您的应用程序有一个内容脚本,注入https://myserver.com/activateapp.php,用于扫描URL并选择客户ID.应用找到ID后,会将其存储在localStorage中.由于无效的客户ID产生404错误,您知道当内容脚本运行时,该页面不是404错误;因此,它正在读取有效的客户ID.
>只要应用程序想要查询您的服务,它就会检查它是否在localStorage中有客户ID.如果是,则使用该ID;如果没有,则会显示一条消息,表明该应用尚未激活.打包的应用程序永远不会删除localStorage,除非您的应用程序被编程为擦除自己的存储,或者用户从控制台执行此操作.存储擦除永远不会“意外”发生.即使是最强大的浏览器范围的数据/缓存清除也只能从网页中清除localStorage,而不是从应用和扩展中清除.

为了提高安全性 – 如果您不希望人们随机猜测客户ID,您可以添加额外的签名参数,例如https://myserver.com/activateapp.php?custid=123456789\u0026amp;sig=2464509243.这个额外的参数是一些服务器验证的客户ID转换(理想情况下是加密签名或与数据库中的ID相关联的纯随机值),任何人都无法猜测.当对activateapp.php的请求命中服务器时,它会检查有效的客户ID和有效的相应签名.当然,这并不能阻止合法访问有效链接的人与未经授权的人共享链接,但我认为这是旧系统中存在的漏洞.

点赞