认证&许可我的加载项计划

时间:2015-04-23 18:49:56

标签: c# licensing add-in

我为一个商业计划创建了一个Addin,我希望根据每年的订阅销售给客户。我一直在努力思考,无论如何,在安全和保护中验证我的插件的最佳方法是什么?方便的方式。

要求

  • 轻松为客户设置新许可,无需更改代码
  • 远程更新许可证
  • 客户不是黑客,但不容易破解

环境

  • 商业程序在服务器上运行,所有用户只需点击一次c#客户端。插件位于客户端。
  • 我可以从客户端读取全局变量,例如站点名称,这对于每个实例都是唯一的,不会被客户编辑,也可以是日期(所以不用担心客户会更改日期设置)
  • 我可以与自己的服务器通信,我可以存储许可证结束日期

关注

  • 如果我使用我的服务器进行日常身份验证且无法访问,或者他们阻止了IP ...
  • 当我从客户端向我的服务器请求enddate时,可以更改,但是如何在两个系统之间有效加密,而不需要整个私钥/公钥设置?

我知道这是一个广泛的问题,但我也需要对此涉及的不同方面有广泛的答案。有人可以指导我什么是一个很好的设置,或指导我到一个描述这个的网站?人们会认为这很典型..我找不到任何东西。

1 个答案:

答案 0 :(得分:2)

多次尝试/离线工作的问题可以通过例如为插件请求发出令牌("临时"密钥)来解决,该请求在有限的时间内有效(例如,1周)。因此用户获得了宽限期" 1周,当他可以工作"离线"。如果在这段时间内,插件将无法连接到互联网以获得更新的令牌,那么它会阻止自己直到获得新令牌。示例 - 具有"宽限期"的office 365一个月。

即。在可能的情况下,addin向许可证服务器发送包含一些唯一用户ID的请求(如您提到的应用程序URL或任何唯一标识客户端的内容),服务器搜索您的许可证数据库并发回包含许可证结束日期的(加密)令牌和所需的令牌刷新日期(当前服务器日期+ 1周)

要进行加密,我认为您应该选择"私钥/公钥设置" ..为什么要避免这种情况 - 它似乎很有意义,而且并不难实现以.NET为例。即使用私钥/公钥,您至少可以确保没有人能够模仿"您的服务器,只要您将私钥保密在许可证服务器上即可。

另外,请注意,当破解插件本身(它是一个.NET代码,对吗?)时,可能没有人会破解加密通信。我认为这种担忧可能无法解决,而且可能是最大的问题。即恶意用户只需删除您的插件代码中的许可证检查即可。但无论如何,这假设用户至少有一些破解程序代码的经验。

还有一个考虑因素 - 如果您不打算自己出售插件(例如,处理客户订单,信用卡,进行欺诈检查等),您最好选择一些"电子商务"合作伙伴公司,专门销售在线软件,如paypro,avangate,bluesnap,2checkout等。它可能已经有许多预先定义的(固定)许可机制/选项。