如何管理许可以启用 Web 应用程序的功能? [关闭]
Posted
技术标签:
【中文标题】如何管理许可以启用 Web 应用程序的功能? [关闭]【英文标题】:How to manage licensing to enable features for a web application? [closed] 【发布时间】:2013-03-19 22:34:20 【问题描述】:我将销售一种由我自己的服务器上的 Web 应用程序管理的新产品。 Web 应用程序将允许管理一些设备。
我想将可管理设备的数量限制为用户购买的许可证数量。
我的网络应用目前允许管理所有设备,没有数量限制。
我不知道从哪里开始实施许可(许可密钥生成和检查),也不知道根据用户拥有的许可密钥限制设备。
我们非常欢迎任何帮助。 提前谢谢你。
仅供参考:我正在使用 jquery、php 和 mysql。
【问题讨论】:
在您可以编译模块之前,您将无法使用任何无法轻易撤消的东西。如果您只使用 javascript 和 PHP,那么任何提供保护或限制的例程都可以轻松删除。 即使我根据链接到用户的有效许可证密钥的数量(存储在 MySQL 中的值)来限制 mysql 查询? 【参考方案1】:我会在数据库中实现几个表,如下所示:
会有以下实体:User、License和Device
并且这些实体将相互关联,如上所示。每个许可证都将包含有关许可设备数量的信息。
当设备连接到您的服务时,您的服务会通过其 ID 识别它,该 ID 在连接时由设备发送。然后就可以查看,设备是否注册了,和这个设备相关的是什么license。
设备数量限制将在设备注册时检查。
当用户注册设备时(将信息添加到表中:Devices
和 LicensedDevices
),您的代码应根据Licenses
表中的devicesQty
字段值检查已使用此许可证注册的设备的数量。
如果devicesQty
值允许添加更多设备,那么您的代码会将新设备添加到数据库中。
更新:
要控制许可设备的数量,您需要注册这些设备(例如 - 使用这些设备的唯一 ID)。否则,您无法控制使用您服务的设备数量。
一个设备连接、工作、断开连接,然后是另一个,然后是另一个,依此类推。在这种情况下如何控制数量?我认为没有办法,除非注册这些设备的 id。
如果用户将他的设备更换为新设备,那么应该有一个程序来更新有关已注册设备的信息。
如果您的客户仅使用网络浏览器来使用您的服务,那么控制许可证/设备的唯一方法是将用户 ID+密码+设备 ID 绑定到许可证。并在登录到您的网络服务/网络服务器时检查此信息。
如果您在移动设备上使用本机应用程序连接到您的网络服务,那么还有更复杂的方法。
通过asymetric encryption approach 实现许可证密钥生成/验证。
为每个用户生成公钥和私钥。然后将私钥存储在您的数据库中,不要向任何人显示。
假设您的公钥是:ABC-123-456
使用Base64 algorithm 将公钥字节转换为字母数字字符。
然后,在销售许可证时生成任意唯一的许可证代码。
假设您的许可证代码是:XYZ-789-012
并为最终用户提供公钥和许可证代码:ABC-123-456和XYZ-789-012
用户将公钥和许可证代码设置为自定义移动应用程序设置。此应用程序使用此公钥加密所有发送数据。并且许可代码在加密之前包含在数据包中。
当您的服务器从设备接收到数据时,它会通过 deviceId 找到合适的用户,然后找到合适的私钥来解密数据包。然后检查这个数据包的正确性。
【讨论】:
感谢您的回答,我忘了提到用户不需要将设备与许可证相关联。对我们来说重要的是可管理的设备数量,所以我想关于将最大数量与用户 ID 相关联。我想我可以在数据库模式中管理它。但我想知道如何管理许可流程(密钥生成、验证)。 如果用户购买了多个许可证,那么您只需根据所有购买的许可证的数量总和使用总数量总和。我说的对吗? 还有一个问题 - 您的移动设备是否使用自定义本机应用程序连接到您的 Web 服务?或者它是一个基于浏览器的应用程序? 我已经更新了两种变体的答案。当您在移动设备上使用基于浏览器的应用或原生应用时。 移动设备将使用本机应用程序,但目前,我使用基于 Web 的响应式应用程序来确保与每个浏览器/设备的兼容性以上是关于如何管理许可以启用 Web 应用程序的功能? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章