我会在数据库中实现几个表,如下所示:
会有以下实体: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 找到合适的用户,然后找到合适的私钥来解密数据包。然后检查这个数据包的正确性。