文档章节

.Net开发笔记(二十)创建一个需要授权的第三方组件

IT周见智
 IT周见智
发布于 2015/06/05 17:17
字数 1415
阅读 3
收藏 0
点赞 0
评论 0

在使用需要授权的软件时,注册付费的目标是软件的使用者,我们开发人员平时用到的一些第三方组件也是需要授权付费的,也就是说,付费者是开发人员,并不是系统(使用了该第三方组件)的最终使用者。

以上两者的区别如下图:

图1

本篇文章介绍.net中怎样开发需要授权的第三方控件(组件),既然授权对象是开发者,不是最终用户,那么授权入口只能提供给开发人员,而不应该提供给最终用户。另外,一般情况下,组件的一次成功授权只能供一个开发人员使用,因此授权信息需要跟开发人员的电脑绑定,这个可以通过关联机器硬件编码来做到。软件开发完成发布后,第三方组件不应该影响用户的使用,也就是说,发布后的组件,不能再绑定到具体电脑。总结一下,大概包含以下几点:

  • 组件的授权收费是针对使用该组件开发软件的人;
  • 组件的授权跟机器绑定,一次成功的授权只能供一个开发人员使用;
  • 软件发布后,组件不能再影响最终用户,第三方组件的授权入口对最终用户透明。

要解决以上三点,需要知道很重要的一个概念就是之前系列博客中介绍的“设计时(Design-Time)”和“运行时(Run-Time)”,以及明白它两的区别和联系。

前面系列博客得知:

任何一个组件有两种状态,即“设计时”和“运行时”,简单之,组件处在窗体设计器中时,它就处于“设计时”;反之,程序跑起来后,组件就处于“运行时”。同一个组件,处于设计时的行为和处于运行时的行为可能不一样,这就像同一个人,在他老爸面前和在他儿子面前的行为可能不一样。用一个简洁的代码展示如下:

 1 class 组件
 2 {
 3 public 组件()
 4 {
 5     if(设计时)
 6     {
 7          //do something while design-time
 8     }
 9     else
10     {
11          //do something while run-time
12     }
13 }
14 public void DoSomething()
15 {
16    if(设计时)
17 {
18     //do something while design-time
19 }
20 else
21 {
22    //do something while run-time
23 }
24 }
25 }
View Code

如上代码所示,软件开发阶段,开发人员使用第三方组件,需要在窗体设计器中实例化一个组件实例,那么这时候就可以检查组件在当前机器上的授权状态(已授权、试用期还是已过期),这时候检查授权状态需要和当前机器硬件信息关联。软件发布后,组件不再在窗体设计器中,同时组件面向的是最终用户,理论上不应该再检查组件的授权状态,但是为了防止开发人员使用试用期的组件发布了软件,因此在组件发布后,还是有必要检查一下组件的授权状态,这时候检查方式就不用与硬件信息关联了。

本篇Demo中做了一个等待控件,我们在使用它进行开发的时候需要取得授权许可,授权时根据生成的申请码(跟本机硬盘编号关联),去匹配组件开发商提供的激活码,两者一致的话,授权成功,否则提供30天的试用期,在试用阶段,界面显示试用标志,30天试用结束后,组件不能再继续试用。如果需要发布,则需要调用组件对应的方法,给它提供一个申请码和一个激活码,授权成功,组件正常使用,授权不成功,组件显示未授权标志(但不要求最终用户获得授权)。

判断组件当前状态方法:

 1  /// <summary>
 2         /// 检查组件状态
 3         /// </summary>
 4         void CheckStatus()
 5         {
 6             ISelectionService isp = GetService(typeof(ISelectionService)) as ISelectionService; //获取服务
 7 //同一个组件 处于不同状态下 有不同的行为
 8             if (isp == null) //组件处于发布时(或者运行时 run-time)
 9             {
10 //什么都不干
11             }
12             else //组件处于开发时(或者设计时 design-time)
13             {
14                 if (AuthorizeHelper.CheckActivateCode(Properties.Settings.Default.ActivateCode, LocalMachine.GetAskCode())) //检查是否已授权
15                 {
16                     currentStatus = 1; //开发时已授权
17                 }
18                 else
19                 {
20                     using (frmAuthority frma = new frmAuthority()) //授权对话框
21                     {
22                         if (frma.ShowDialog() == DialogResult.OK) //授权成功
23                         {
24                             currentStatus = 1;
25                         }
26                         else
27                         {
28                             if ((DateTime.Now - Properties.Settings.Default.TrialStart).TotalDays >= 30) //判断试用是否到期
29                             {
30                                 //抛异常
31                                 throw new Exception("ProgressBar组件未授权!");
32                             }
33                             else
34                             {
35                                 currentStatus = 0; //开发时试用
36                             }
37                         }
38                     }
39                 }
40             }
41         }
View Code

发布后,提供申请码和激活码激活组件:

 1 /// <summary>
 2         /// 发布时授权入口
 3         /// </summary>
 4         /// <param name="askCode"></param>
 5         /// <param name="activateCode"></param>
 6         public void UnLock(string askCode, string activateCode)
 7         {
 8             if (AuthorizeHelper.CheckActivateCode(activateCode, askCode)) //判断是否合法
 9             {
10                 currentStatus = 3; //开发时(运行时)已授权
11             }
12             else
13             {
14                 currentStatus = 2; //开发时(运行时)试用
15             }
16         }
View Code

注:本文主要讲述第三方组件授权原理,其余有关授权方式是否安全等有待完善。

Demo项目结构:

图2

效果图:

1)开发阶段,组件授权界面

图3

2)开发阶段,ProgressBar试用期

图4

3)发布后,未授权的ProgressBar

图5

4)开发阶段,授权成功

图6

源码下载地址:http://files.cnblogs.com/xiaozhi_5638/ComponentCopyProtection.rar

希望有帮助!

 

© 著作权归作者所有

共有 人打赏支持
IT周见智

IT周见智

粉丝 10
博文 61
码字总数 185891
作品 0
西青
KindleNote 已开源

KindleNote 写在前面 这是一个不算太长的故事。 故事源于我有一个Kindle,时常用它来看看书,顺手标记一下或者做做笔记。 某天当我想要把其中的标记或笔记导出来的时候,发现市场上并无较好的...

BadTudou
01/03
0
0
信息安全管理的二十条军规

棱镜门事件至少告诉了我们一个事实,那就是NSA的安全技术和管理水平领先业界至少3-5年。 企业今天面临空前的安全威胁,犯罪集团、黑客散客、竞争对手、内部员工…如果没有周密的安全管理体系...

Cashcow
2014/02/17
0
0
async-http-client开源库学习笔记(一)

文前闲话 作为一个Android开发的大龄初学者,面对扑面而来的各种姿势的Android的开源组件,让人倍感窒息,难以应对。无奈为了养家糊口,虽然已近不惑,人老珠黄,也只能废寝忘食,逐个体位细...

马丁当
2015/08/19
0
3
01第三方平台概述

第三方平台概述 一、概述 公众平台第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可以同时授权给多家第三方),通过第三方平台来完成业务,...

MadDragon
03/12
0
0
ASP.NET MVC使用Oauth2.0实现身份验证

 随着软件的不断发展,出现了更多的身份验证使用场景,除了典型的服务器与客户端之间的身份验证外还有,如服务与服务之间的(如微服务架构)、服务器与多种客户端的(如PC、移动、Web等),甚至...

CSharpKit
2017/12/20
0
0
iOS 基于第三方QQ授权登录

iOS 基于第三方QQ授权登录 基于iOS实现APP的第三方QQ登陆,接入第三方SDK时的一个基本的步骤: 1,找到相关的开放平台,QQ互联平台,http://connect.qq.com/; 2,注册成功后创建自己的APP,...

Youth_关旋
2016/08/27
114
0
Java读取Evernote笔记 – 使用DeveloperToken

在学习的时候,经常使用Evernote记录一下笔记或收藏一些有用的文章。如果通过Java读取Evernote文章哪?官方给处理授权接口。 首先我们需要在Evernote的sandbox环境注册一个账户,https://san...

YOTOO
2014/07/05
0
1
网页版Simple电子市场开放组件上线

Simple在官方网站上宣布,Simple市场是一个基于SimpleFramework技术衍生的应用商店,包括扩展组件、门户模块、文档资源、应用程序等。每个组件无缝在simple平台中运行。 目前基本的模式为:自...

simplesns
2011/07/04
1K
1
ContentProvider

android使用一种称为contentprovider的概念来将数据抽象为服务。 这种内容提供给程序的理念看起来像是启用了REST的数据提供程序。REST(REpresentational State Transfer具象状态传输),它是一...

刘小米
2014/11/15
0
0
幺鹿/lib-android-Social

我的其他仓库推荐 分类(lib-android) -描述- -仓库链接- LoadingLayout Android 业务开发常用的 loadinglayout 用于封装加载过程中,加载完成&有数据,加载完成&无数据,加载错误的情况。 ht...

幺鹿
2016/07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

与女儿谈商业模式 (5):糖果连锁店?

分类:与女儿谈商业模式 2007-08-02 15:27阅读(8394)评论(32)   与女儿谈商业模式(5):糖果连锁店?   陈志武 /文   谈过星巴克、沃尔玛、戴尔以及微软的故事后,给陈笛印象最深的莫...

祖冲之
2分钟前
0
0
Linux平台下RMAN异机恢复总结

潇湘隐者 Linux平台下RMAN异机恢复总结 2017-05-29 16:30 by 潇湘隐者, ... 阅读, ... 评论, 收藏, 编辑 下面总结、整理一下RMAN异机恢复这方面的知识点,这篇笔记在个人笔记里面躺了几年了,...

rootliu
9分钟前
0
0
Spring配置xml启动报错 Connot find 'beans'

1.我们先看一下spring的原始配置 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSc......

江湖鱼大虾
11分钟前
0
0
www.w3.org被qiang导致logback报错:Connect reset

web项目部署到tomcat后,web项目中的logback不能运行,报错信息如下: Reported exception: ch.qos.logback.core.joran.spi.JoranException: I/O error occurred while parsing xml file......

浮躁的码农
35分钟前
0
0
JDeveloper中文乱码解决

全局设置字体; 全局设置环境编码; 项目设置编译器环境编码。

wffger
今天
2
0
MySQL主从介绍 , 准备工作,配置主,配置从, 测试主从同步

MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 MySQL主从是基于binlog的,主上须开启bin...

TaoXu
今天
2
0
线性代数学习总结

亭子happy
今天
1
0
Java8:Lambda表达式增强版Comparator和排序

1、概述 在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式——特别是怎样使用它来编写Comparator和对集合(Collection)进行排序。 这篇文章是...

孟飞阳
今天
0
0
从架构到组件,深挖istio如何连接、管理和保护微服务2.0?

近几年我一直从事于微服务系统的设计以及实现方面的工作,属于微服务架构一线实践者。之前做过一些单体系统的微服务改造,在微服务拆分、治理等方面都有一定的经验。 本人比较特殊一点的经历...

xiaomin0322
今天
1
0
基于vue的h5文件切片上传(获取文件md5,实现秒传、进度条实现)

template <button @click="file"></button><label ref="upload" style="position: relative;"> <input type="file" @change="selectFile" style="position: abs......

hkaikai
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部