销售license是商业软件的贯用商业模式。用户向商家购买软件安装盘搭载license许可,才可以使用该软件。我们作为软件开发者,为了保护自身的权益,在软件开发过程中也不可避免的会设计license管控机制。下面就讲一下设计一个基础的license控制机制需要考虑的方方面面。

license管控方式

license大体有两种管控方式,可概括为认证和鉴权。认证是指用户身份认证,鉴权是检验用户是否具备使用软件某些功能的权限。

1. 认证:通过软件的认证机制可以判断用户的身份是否合法,只有身份合法的用户才可以使用软件。身份认证可以防止黑客或者竞争对手使用软件,做研究仿制;维护产品的原创性和竞争力。

2. 鉴权:鉴权是限制用户能使用软件的哪些功能,是能使用整个软件的功能全集呢还是只能使用一个子集。鉴权方式有两种:功能有无的鉴权-有权限的用户能操作功能界面使用软件,无权限的用户屏蔽操作入口;功能受限使用的鉴权-根据用户购买的license规格限制用户使用的次数或者使用软件处理数据的规模。

3.有效期:license使用期限的限制,超过期限后软件不允许再使用。需要申请延期或者重新申请license。

License实现方案

下面讲一下License中认证和鉴权的常规实现方式。

1.认证:前面说了认证的目的是识别用户是否为合法用户,对于在线系统通常的做法是设计一个登录认证机制,通过用户名和密码登录,登录成功的用户即是合法用户。离线单机工具一般是通过绑定软件安装的机器或者发放序列号的方式控制。如果是绑定软件安装的机器需要在license申请前采集机器指纹(含CPU、硬盘、MAC地址等一种或者几种信息的加密数据)。机器指纹的加密算法一般是采用不可逆的加密算法,如MD5等。

2. 鉴权:对于鉴权而言,需要将控制的功能项编码和受限使用的控制信息加密后放到license文件中,在软件运行过程中实时检测。鉴权信息一般是通过可逆的加密算法加密,如RSA非对称加密算法。license发放的时候用公钥加密,软件运行时通过私钥解密。

License管理流程

既然License是一种管控系统使用的凭证,那么肯定就有申请凭证、审核申请的流程。涉及的角色也包括申请人、审批人、用户。常规流程如下:

上面只是一个最简易的license管理流程,实际设计中需要根据具体的业务来,例如上面的审核人分几级,如何设置等,不同的组织结构是不一样的。有的license管理还需要考虑升级、延期的处理;毕竟升级旧的license和新申请一个license在商务价格上是不一样的。

软件License认证方案的设计思路的更多相关文章

  1. (原创)通用查询实现方案(可用于DDD)[附源码] -- 设计思路

    [声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3988592.html).   [系列文章] 通用查询实现方案(可用于DDD)[附源码] -- ...

  2. 通用查询实现方案(可用于DDD)[附源码] -- 设计思路

    原文:通用查询实现方案(可用于DDD)[附源码] -- 设计思路 [声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3988592.html).   ...

  3. WebGIS中快速整合管理多源矢量服务以及服务权限控制的一种设计思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在真实项目中,往往GIS服务数据源被其他多个信息中心或者第三方 ...

  4. EventStore的设计思路

    EventStore的设计思路 最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event ...

  5. FPGA学习:VHDL设计灵活性&不同设计思路比较

    概要 由于VHDL编程实现数字电路具有很高的灵活性,为多种不同的思路编写实现同一种功能提供了可能.这些不同的设计思路,在耗费资源,可靠性,速度上也有很大的差异,往往需要我们根据实际需求和资源条件选择适 ...

  6. IM开发基础知识补课(七):主流移动端账号登录方式的原理及设计思路

    1.引言 在即时通讯网经常能看到各种高大上的高并发.分布式.高性能架构设计方面的文章,平时大家参加的众多开发者大会,主题也都是各种高大上的话题——什么5G啦.AI人工智能啦.什么阿里双11分分钟多少万 ...

  7. 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路

    最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...

  8. Redis入门指南(第2版) Redis设计思路学习与总结

    https://www.qcloud.com/community/article/222 宋增宽,腾讯工程师,16年毕业加入腾讯,从事海量服务后台设计与研发工作,现在负责QQ群后台等项目,喜欢研究技术 ...

  9. 第三篇:Retrofit SDK的设计思路

    2016-05-08 15:24:03 Retreofit毫无疑问是一个优美的开源框架,有轻量级.耦合性低.扩展性好.灵活性高的特点,那么Retrofit的设计者们到底是怎么样做到这些的呢?我希望能够 ...

随机推荐

  1. ps调整文字平滑

    1. 选中文字 2. 调整字体样式,选择"平滑"

  2. JavaScript 中的对象深度复制(Object Deep Clone)

    JavaScript中并没有直接提供对象复制(Object Clone)的方法. JavaScript中的赋值,其实并不是复制对象,而是类似`c/c++`中的引用(或指针),因此下面的代码中改变对象b ...

  3. 可拖动布局之Gridster

    看过bootstrap可视化布局系统的人是不是都会对页面元素的拖拽有着很大的兴趣?下面呢,楼主就给大家讲两个楼主知道的拖拽小插件吧. 一.gridster 1.了解gridster 后续官网:http ...

  4. Linux常见目录及其作用

    在Linux操作系统中,所有文件和目录都被组织成一个以根节点开始的倒置的树状结构.如下图 系统一般以 / 来表示根目录.在根目录之下的可以是目录也可以是文件,而每一个目录中又可以包含子目录文件.如此反 ...

  5. Nginx的gzip压缩的原理和设置参数

    开启Nginx gzip压缩非常简单,达到的效果可以压缩静态文件大小.提高页面访问速度.节省流量和带宽是很有帮助的,也为用户省去了很多流量:唯一的不足就是开启之后服务器这边会增加运算,进行压缩运算处理 ...

  6. yaf框架加载全局公共函数

    在Boostrap里面建一个方法(按规则命名的函数都会被自动执行) public function _initCommonFunctions(){ Yaf_Loader::import(Yaf_App ...

  7. java url demo

    // File Name : URLDemo.java import java.net.*; import java.io.*; public class URLDemo { public stati ...

  8. UVA - 11995 I Can Guess the Data Structure!(模拟)

    思路:分别定义栈,队列,优先队列(数值大的优先级越高).每次放入的时候,就往分别向三个数据结构中加入这个数:每次取出的时候就检查这个数是否与三个数据结构的第一个数(栈顶,队首),不相等就排除这个数据结 ...

  9. LOJ6003 - 「网络流 24 题」魔术球

    原题链接 Description 假设有根柱子,现要按下述规则在这根柱子中依次放入编号为的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法 ...

  10. html标签详解

    html标签详解   <!DOCTYPE> 标签 <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前. <!DOCTYPE ...