系统授权license方案

简介: 软件系统设计关于授权时的一点见解

背景

  • 一体机的客户需求
  • 高校云系统搭建
  • 混合云场景

需求

  • 系统使用期限限制
  • 节点扩容限制
  • 无缝迁移限制

调研方案

  • 对于专业的license来讲,可能购买第三方提供的专业的授权保护方案产品,如:插件、u盾等
  • 软件打包后部署、启动时的环境限制:启动时采用特殊命令加以部署,无法让第三方独自部署,添加一些启动参数,写入程序启动main函数
  • 软件层面的自我保护,主要通过软件的自身授权形式:角色、菜单、资源授权等
  • 软件代码的反编译
  • 提供售后服务形式的软件授权:解禁基础、基本功能,不完全一次性提供全部功能,类似试用授权

实现

对于现在的环境,考虑现有的技术手段,可以采用混合的一些方式来实现。

方案

对于系统时间、节点扩容、无缝迁移的限制,可以采用Hash法来进行处理。根据截止时间、节点信息、使用的软件信息等来算出Md5后的结果,然后在部署时,各个微服务的网关入口根据也根据这些因素来算出一个Md5的结果,然后通过判断这两个值是否一样,从而判断是否有信息(截止时间、节点信息、使用的软件调度信息等)发生改变,一旦不一致,则会停止服务的访问。

  • 授权日期:开始时间、结束时间
  • 节点扩容:无法根本解决节点被加入集群,但可以从服务调度入手,需要对相关服务和Volcano定制化,防止任务被调度到客户人为加入的节点
  • 无缝迁移:可以获取客户提供的服务器、或提供的服务器的设备信息,绑定这些设备信息,让系统无法迁移到第三方未授权的机器

设备方面,由于系统时间、节点设备信息、节点调度的限制,可以采用Hash的方式进行处理,具体在改动方面,如果只是针对底层系统软件,那需要在网关方面进行入口校验Hash信息,Hash算法可以采用MD5算法:确定性,不可逆性。

其次,对于扩容,可以从调度层面绑定存在的节点设备,对于后续添加的节点设备不可被调度,这涉及到Volcano需求定制化。在Volcano选择节点的时候,需要选择当前所有符合的节点。

var nodes []*api.NodeInfo
if targetJob != nil && job.UID == targetJob.UID {
    klog.V(4).Infof("Try to allocate resource to target job: %s", job.Name)
    nodes = allNodes
} else {
    nodes = unlockedNodes
}


nodeScores := util.PrioritizeNodes(task, candidateNodes, ssn.BatchNodeOrderFn, ssn.NodeOrderMapFn, ssn.NodeOrderReduceFn)

node := ssn.BestNodeFn(task, nodeScores)
if node == nil {
    node = util.SelectBestNode(nodeScores)
}

同时在调度过程中,选择节点的关键是只能在已报备的节点中选择,或者只从当前Deviceplugin上报的节点中选择,这样就需要Deviceplugin在上报时,只能上报已经存在的节点,不上报后加的节点服务器。

对于系统的迁移,主要通过绑定设备的操作,来限制客户自主迁移系统服务。这一块在Hash中可以通过设备信息等进行Hash校验。

最后,对于运维系统,关闭添加节点的入口,除非用户得到授权许可。这里可以采用菜单权限管理限制,前期给予用户一般权限,在用户被授权后,可以更新角色,从而增加其访问权限。这一点,可能需要有服务开发的改动。

相关文章
|
存储 SQL 缓存
Hadoop入门(一篇就够了)
Hadoop入门(一篇就够了)
25596 4
Hadoop入门(一篇就够了)
|
监控 Java 测试技术
实战:Springboot集成Sentinel实现流量控制、熔断降级、负载保护
实战:Springboot集成Sentinel实现流量控制、熔断降级、负载保护
|
JSON 数据安全/隐私保护 数据格式
license授权方案
当我们的商业软件售卖给客户后,往往需要对分发出去的软件进行限制,比如指定使用者,限制软件使用有效时间,声明版权信息、限制软件使用磁盘大小等。很多场景又是离线使用,无法使用网络进行认证。所以参照 https 网站、PE 文件的签名机制,开发出了一套用于授权证书签名校验的程序,采用 MIT 开源协议,非常方便集成到其它软件中 ———————————————— 版权声明:本文为CSDN博主「ice&wind」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_43480441/article/
1100 0
|
XML SQL JavaScript
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
这篇文章介绍了如何在Vue页面中结合SpringBoot、MyBatis、ElementUI和ECharts,实现从数据库获取数据并展示为图表的过程,包括前端和后端的代码实现以及遇到的问题和解决方法。
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
|
Java 数据安全/隐私保护 开发者
SpringBoot整合TrueLicense生成和验证License证书
TrueLicense生成和验证License证书
2970 1
|
SpringCloudAlibaba Cloud Native Java
license版权证书生成与验证
License,即版权许可证,一般用于收费软件给付费用户提供的访问许可证明。根据应用部署位置的不同,一般可以分为以下两种情况讨论: - 应用部署在开发者自己的云服务器上,如现在的saas模式的软件供应商就是这样部署的。这种情况下用户通过账号登录的形式远程访问,因此只需要在账号登录的时候校验目标账号的有效期、访问权限等信息即可。 - 应用部署在客户的内网环境,即本地化部署。因为这种情况开发者无法控制客户的网络环境,也不能保证应用所在服务器可以访问外网,因此通常的做法是使用服务器许可文件,在应用启动的时候加载
3343 0
license版权证书生成与验证
|
Java Linux Maven
springboot增加license授权认证
springboot增加license授权认证
453 0
|
Java 数据安全/隐私保护
License 授权机制保护下的商业软件产品
License 授权机制保护下的商业软件产品
935 0
|
存储 Java 关系型数据库
Nacos、Apollo、Config配置中心如何选型?这10个维度告诉你
Nacos、Apollo、Config配置中心如何选型?这10个维度告诉你