我一直在为我的公司开发和维护Chrome扩展程序,每个客户都会在代码中分配一个唯一的ID。我们一直在使用该ID来确定许可证状态并登录我们的服务(带有每月订阅费的付费扩展)。
到目前为止,我们自己托管了扩展文件,并为每个客户扩展程序提供了唯一的更新URL。这很好,很简单;转到我们的网站,点击安装,你就完成了。然而,在最新的Chrome版本中,Google的安装程序受到了阻碍,因为他们现在要求用户通过将CRX文件拖放到chrome:// chrome / extensions / tab中来安装扩展程序。除非您的扩展程序可以通过Chrome网上应用店获得 - 这可以解决问题:
我并非100%确定我的陈述是完全正确的,所以如果我错过了什么,请随时启发我。
如果是,问题是我们是否可以通过网上商店(使用唯一ID)以某种方式为每个客户定制扩展,而无需为每个ID发布一个扩展名?
作为一个附带问题,任何可能用另一种方法解决问题的答案也将被接受。
答案 0 :(得分:2)
对于下面的答案,我假设您的应用是打包应用,而不是托管应用。
我的解决方案与您当前的实施方案非常相似,但为用户添加了一个额外的步骤。对于学生用户,该过程将如下工作:
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
,除非您的应用程序被编程为擦除自己的存储,或者用户从控制台执行此操作。存储擦除永远不会“意外”发生。即使是最强大的浏览器范围内的数据/缓存清除也只会从网页中清除localStorage
,而不是从应用和扩展程序清除。为了提高安全性 - 如果您不希望人们随机猜测客户ID,您可以添加额外的签名参数,例如https://myserver.com/activateapp.php?custid=123456789&sig=2464509243
。这个额外的参数是一些服务器验证的客户ID转换(理想情况下是加密签名或与数据库中的ID相关联的纯随机值),任何人都无法猜测。当activateapp.php
的请求命中服务器时,它会检查有效的客户ID 和是否有效的相应签名。当然,这并不能阻止合法访问有效链接的人与未经授权的人共享链接,但我认为这是旧系统中存在的漏洞。