面向.NET专业人士的最佳授权软件





4.00/5 (3投票s)
如果您是销售软件产品的软件开发人员,您必须考虑的一件事就是您打算如何授权您的软件。
授权概述
如果您是销售软件产品的软件开发人员,您必须考虑的一件事就是您打算如何授权您的软件。
鉴于有许多授权选项可用,这可能是一个相当困难的决定。在为您的产品考虑授权工具时,最重要的一点是理解,不存在能够使您的产品完全免受非法使用您软件的人的影响的工具。总有人会想方设法绕过任何授权,以便能够免费使用您的产品,只要您的产品足够好。
授权的目的是确保您为自己提供一定程度的保护,这样“软件盗版者”就无法在试用期后轻松地在没有正确注册和购买的情况下使用您的产品。授权您的产品将可以阻止大多数此类人,但最顽固的“授权破解者”除外。
下一个考虑因素是您希望实现的授权类型。在这种情况下,有两种模型;“加密”授权,一旦购买,允许客户在所需的任何数量的计算机上安装您的产品;或者“认证”授权,允许有限数量的安装和卸载。
.NET软件开发中的第一种授权类型随着.NET框架中内置的授权模型而出现。然而,这或多或少一直是一个钩子,用于第三方提供更复杂的授权方案。使用框架中实现的.NET授权模型是实现这种保护的一种相当弱的形式。
“加密”授权主要允许一次性购买您的软件,即使有更复杂的可用方案,也可能被滥用,因为单个产品会通过授权传递给多个未购买您软件的方。对于考虑成本而只有大型、成熟的公司才能负担的个人、商业开发人员来说,通过法律途径保护此类产品授权方式的版权侵权几乎是无用的。
尽管如此,如果计划是基于功能集进行软件授权,通过为每个功能集提供不同的定价授权,那么通用授权可能是一个考虑因素。公司确实成功地使用了这种授权方案,尽管它仍然存在潜在滥用的漏洞。
然而,对于个人软件开发人员来说,使用“认证”授权模型可能是一种更具成本效益的方法,尽管它本身实现起来有点复杂,但为您的产品提供了更高级别的保护。
Infralution 授权
鉴于个人开发人员预算有限,价格昂贵的授权工具可能负担不起,这会迫使开发人员觉得他们必须妥协来保护自己的知识产权。这并非必须如此。
有一个授权工具可以轻松地适应任何开发人员的预算;Infralution 的授权系统,可以在以下链接找到… http://infralution.com/licensing.html
单人开发人员许可证的价格为 170.00 美元,非常实惠。这款优秀的软件已上市超过 10 年,并提供“加密”授权和“认证”授权,这两者都包含在同一个软件包中。此外,整个工具套件的源代码都可以提供,但需额外付费。
如果软件包中所有工具的源代码都可用,那么使用此软件会使您的授权方案容易受到攻击,这是有道理的。答案是根本不会,因为,就像大多数加密过程一样,重要的是密钥,而不是算法(尽管为了获得良好的安全性,您确实需要一个强大的算法),这些密钥用于生成您产品(们)的许可证。此外,如果使用“认证”选项,则在相应的 Web 服务中没有任何用于生成许可证的算法代码。因此,即使有人闯入了您的网站,他们也找不到任何东西。所有此类代码都保存在实际发生许可证生成的开发人员工作站级别。
Infralution 授权系统可用于以下 .NET 项目类型…
- .NET
- Windows Forms(桌面应用程序)
- Windows Presentation Foundation(桌面应用程序)
- 类库
- 紧凑型框架
使用软件
以下信息是关于如何实现 Infralution 授权系统的一个非常通用的概述。它不应被视为您可能需要的唯一信息,因为任何类型的授权系统都有其复杂性,但这个概述确实表明了将此软件集成到您的产品中的相对容易程度。
>>>>>
要为您的产品实现任一授权方案,将需要以下工具和流程…
对于加密授权
- 许可证跟踪器工具(许可证生成器和分发器)
- 许可证程序集(对应于产品类型)
- 产品中开发人员定义的许可证代码
对于认证授权
- 许可证跟踪器工具(许可证生成器和分发器)
- 许可证程序集(对应于产品类型)
- 产品中开发人员定义的许可证代码
- 身份验证 Web 服务
“许可证跟踪器”工具是您将用于输入产品许可证参数集并生成实际产品许可证和许可证验证字符串的主要软件(每个许可证集及其对应的验证字符串由您在“许可证跟踪器”中设置的每个产品定义和生成),无论是“加密”还是“认证”许可证类型。它是一个功能强大的工具,要充分利用其功能,必须查阅软件包附带的帮助文件,该文件相当全面(提供 30 天试用版可供下载,以便您可以获得帮助文件供您审查)。
一般来说,当网站收到软件购买订单时,许多公司会为客户生成许可证,然后通过电子邮件发送给他们。“许可证跟踪器”可以与 Microsoft Outlook 集成,以协助向客户发送此类许可证邮件。它还可以与您允许分发您软件的分销商(如 ShareIt 和 PayPal)进行接口。因此,您可以将他们关于您的产品销售/试用下载的数据导入“许可证跟踪器”,以便在适用时提供许可证邮件和许可证调整(例如,延长试用许可证)。
另一种向客户发送购买的许可证的方法,需要您作为产品开发人员进行一些手动干预,那就是让您的网站为您处理。然而,这需要一些设置。在这种情况下,您必须预先生成一些许可证,然后将它们加载到数据库表中,这样当发生购买时,您就可以在客户购买后返回您的网站时立即向他们提供许可证,如果您使用的是允许此类重定向的第三方支付处理器。PayPal 在其 Web Payment Standard 流程方面尤为突出,这也是它仍然受到许多小型企业青睐的原因之一。
但是,如果您实现了 PayPal 的 Web-Pro 功能或 Authority.NET 等支付流程 API;那么您的客户在付款时永远不会离开您的网站,并且您拥有更大的流程控制,而无需担心网站重定向。这使得自动生成和提供许可证的功能更加简单,也更方便客户。
使用这种替代的许可证提供方法可以让您的网站在此情况下为您处理一切。
但是,要小心这种方法的关键弱点。将一组预先生成的许可证上传到您网站上的数据库表可能会容易受到安全漏洞的攻击,从而获取您存储的所有许可证。这可以通过在存储之前加密所有许可证,并在提供给客户时解密来解决。然后,建议对用于执行此操作的安全组件进行充分的混淆。
**将正确的程序集应用于您的产品代码**是实现产品授权软件的开始。这可以通过选择以下程序集之一来轻松完成,您可以在您的产品项目中引用它们。
- Licensing.ASP.dll (ASP.NET)
- Licensing.Forms.dll (Windows Forms 桌面和类库)
- Licensing.WPF.dll (Windows Presentation Foundation)
- Licensing.CF.dll (紧凑型框架)
完成之后,您就可以开始在产品源代码的相应模块中实现您的授权“验证”代码了(例如,对于 WPF 产品,它将输入到“Application.xaml.vb/cs”模块)。
要实现此代码,您必须插入以下代码集…
- 许可证验证字符串
- 许可证验证代码
您选择的许可证类型(“加密”或“认证”)将决定您需要实现的差异代码。但两种代码集都相对相似。下面的示例显示了用于“加密”许可证类型的代码。
示例许可证验证字符串(由许可证跟踪器工具生成)
' ' COPYRIGHT: Copyright 2012 Infralution ' Imports Infralution.Licensing.Forms Imports System.Environment ''' ''' Defines the license provider to use for the custom control ''' Public Class MyControlLicenseProvider Inherits EncryptedLicenseProvider ''' ''' License Validation Parameters String copied from License Tracker ''' Private Const LICENSE_PARAMETERS As String = _ "" + _ " My Product" + _ " " + _ " zX4VW8ukM8aBMgIeYOhBsH6s+UlbYM3jv3kGy59NA5vBDxaCRclowIXk" + _ " HC+Ue+ua0am7brgWss/N7PetcaleXWUJacRaisC5yjl3WK2UWoPQ37HjKijXM++eCO" + _ " q+mEProZYO7Ux2Q8aA13glAXn5Ry9OePA3YmD4f+658k0x1AE=" + _ " AQAB" + _ " " + _ " VyWFO92791568I4C/iw5bNi8y4yhv0GE4/m+5MWMsAlOdIe7GWr3v" + _ " 57rxtMo9iPyfMyHJhLLJHBkuANsI0gWUiaAfyMhpHdM893mkc4PEz8KS+ZSvUCVklNWiP" + _ " WPQUT0cDd6FSxCVjujBoZmIGYe4KglA8vjd2YxtHm7ZgTPYG4=" + _ " YCO+TnF/qnmLuY+NiINXPal3uSZiBuCvlI6RUDtsoVxSV5eld0P4av" + _ " a+m9+viKYMBLd/tOIiNH+Jh1ZQIMeWtDNndxyoRr2S1eRp0fb5XYHk8bvUUJB81a9eSrJ36" + _ " 6YgZwzXuL2oNw4hilZBQCgUgDWEwD4c2meD0dkE5MkTOdI=" + _ " 7" + _ "" ''' ''' The name of the file to store the license key in - the sub directory is created ''' automatically by ILS ''' Private Shared _licenseFile As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\MyLicensedControl\MyLicensedControl.lic" Public Sub New() MyBase.New(LICENSE_PARAMETERS, _licenseFile) End Sub End Class
**示例许可证验证代码**
Imports Infralution.Licensing.Forms Imports System.ComponentModel <LicenseProvider(GetType(MyControlLicenseProvider))> _ Public Class MyControl ''' <summary> ''' The name to display in the license install form ''' </summary> Private Const PRODUCT_NAME As String = "My Control" ''' <summary> ''' The license context last time we checked the license ''' </summary> ''' <remarks> ''' This is used to reduce the number of times the license check needs to be done. ''' If your control is likely to be used in multiple places (eg like a text box) ''' then checking the license each time a control is created can be very annoying ''' when in evaluation mode. ''' </remarks> Shared _lastDesignContext As LicenseContext Shared _licenseChecked As Boolean = False Public Sub New() MyBase.New() InitializeComponent() ' Is the control being displayed in the designer? ' If LicenseManager.CurrentContext.UsageMode = LicenseUsageMode.Designtime Then ' at design time we must check the license every time or else our license may not ' get compiled into the application resources ' If Not LicenseManager.IsLicensed(GetType(MyControl)) Then ' only show the install dialog if we haven't already done so for this form ' If Not LicenseManager.CurrentContext Is _lastDesignContext Then ' Display the evaluation dialog until the user installs a license or ' selects Exit or Continue ' Dim license As EncryptedLicense = Nothing While license Is Nothing Dim evaluationMonitor As New RegistryEvaluationMonitor("MyControlEvaluationPassword") Dim dialog As New EvaluationDialog(evaluationMonitor, PRODUCT_NAME) Dim dialogResult As EvaluationDialogResult = dialog.ShowDialog() If dialogResult = EvaluationDialogResult.Exit Then Throw New LicenseException(GetType(MyControl), Me, "Control not Licensed") End If If dialogResult = EvaluationDialogResult.Continue Then Exit While If dialogResult = EvaluationDialogResult.InstallLicense Then Dim licenseForm As New EncryptedLicenseInstallForm() license = licenseForm.ShowDialog(New MyControlLicenseProvider(), license, PRODUCT_NAME) End If End While _lastDesignContext = LicenseManager.CurrentContext End If End If Else ' at runtime only check the license if we haven't already done so ' If Not _licenseChecked Then ' show a nag screen if the control is not licensed ' If Not LicenseManager.IsLicensed(GetType(MyControl)) Then MessageBox.Show("This application was created using an unlicensed version of MyControl", "Unlicensed Application") End If End If End If _licenseChecked = True End Sub End Class
从上面的代码可以看出,所有的许可证查询/输入表单和许可证验证都通过相对较少的代码集来处理。这对于“加密”和“认证”两种许可证类型都是如此。
但是,**如果您选择使用“认证”许可证类型**,那么除了在产品中输入上述代码之外,您还需要做一些额外的工作。您还必须为您的网站配置身份验证服务器。这比仅使用“加密”授权方案要复杂一些。但是,Infralution 的总体支持非常好,他们非常乐意在合理的时间内回答您所有的问题。然而,如果您认为获得外部帮助来设置此过程更有益,Infralution 将以合理的价格为您在您的网站上设置此服务。
尽管此服务增加了复杂性,但使用许可证身份验证系统的好处大大增强了您产品的保护。对于大多数专业开发人员来说,设置该服务应该不会太困难。
首先,Infralution 许可证系统软件包包含身份验证 Web 服务的完整项目/解决方案。您只需将其作为“子站点”添加到您的网站项目中,然后可以通过 Web 服务协议访问它。
完成此操作后,您可以测试身份验证 Web 服务,以确保它正在运行,方法是输入以下类型的 URL…
http://www.mycompany.com/authenticate/AuthenticationService.asmx
如果您已正确安装 Web 服务,那么您应该会看到一个与下图类似的屏幕…
在 Web 服务项目中,您会找到一个名为“Install.aspx”的网页。在您确认 Web 服务运行正常后,您可以运行此安装页面,它将启动支持从您的软件产品代码库中进行许可证验证所需的数据库,这在前面的示例源代码中已经展示过。
**请注意**,如果您使用此类授权,您的软件产品的许可证验证字符串将包含 Web 服务的 URL 以及许可证要验证的位置。如果您是许多专业开发人员中的一员,您将希望为该服务设置一个测试系统,以确保它在迁移到生产环境之前能够满足您的要求。这需要为您的测试服务器将要使用的位置生成许可证验证字符串,就像您为生产服务器将要使用的位置生成许可证验证字符串一样。这意味着您必须为您的产品维护两种类型的生成,或者在“许可证跟踪器”工具中定义您的产品两次;一次用于测试,一次用于生产。
无论哪种情况,您都必须注意您在产品中使用的验证字符串,以确保它在任一环境中始终指向正确的服务器。
在所有情况下,当您为产品完成许可证验证字符串的生成并对参数满意后,该数据就必须通过“许可证跟踪器”工具导出到相应的 Web 服务的数据库。每当您进行新的许可证生成或修改现有许可证时,“许可证跟踪器”工具都会通知您必须更新验证数据库,以便客户在尝试注册您的产品时能够正确验证为特定产品及其参数集生成的许可证。
**请注意**,无论您是如前所述预先生成许可证还是通过邮件发送方案处理许可证,您都无法修改已设置并投入生产的产品的许可证参数。如果您这样做,那么任何先前出售的许可证(如果尚未由客户验证)将不再对 Web 服务的验证过程有效。此外,任何在您进行许可证参数修改之前已出售和验证的许可证将不再与您的数据库同步,客户的卸载和重新安装也将不再正常工作。
关于此软件所需数据库的说明
Infralution 授权系统将使用两个不同的数据库。第一个是“许可证跟踪器”工具用于存储其所有关于您的产品、为这些产品选择的许可证类型、许可证生成/验证参数以及生成的许可证本身的信息的数据库。此数据库可以是下载包中提供的默认 Access 数据库,也可以配置一个针对 SQL Server 的数据库。
第二个数据库是为身份验证 Web 服务准备的,如果您为您的任何产品选择此许可证类型,则需要它。然而,在这种情况下,您可以使用支持“许可证跟踪器”工具的现有数据库来满足此要求。但是,如果使用此选项,那么“许可证跟踪器”工具的数据库也必须位于 Web 服务可以访问的位置。此外,这意味着所有授权数据都将位于一个位置,并且数据未加密。
由于缺乏数据加密,因此应考虑配置一个单独的身份验证 Web 服务数据库。在这种情况下,只存储许可证验证和跟踪信息,这将为该过程提供额外的保护级别。