0

我发现有几篇文章建议了可以满足我要求的专有解决方案。我希望有人有一个他们可以传递的教程。无论如何 - 这就是我需要的:

我有一个为 Sitefinity 构建的服务器控件。它被编译成一个DLL。当有人购买控件时,我想生成一个许可证文件 (.txt / .lic),其中包含特定于其站点 URL / 主机名的密钥。许可证文件应该支持多个 URL/主机名——以防他们需要它在他们的开发和生产站点上工作。

当有人试图在没有正确的许可证文件的情况下加载控件时 - 它只会吐出“未授权”消息。

有什么想法吗?我看过微软关于服务器控制许可的页面——这让我很头疼。它还获得了 Machine 的许可。我想通过 URL/主机名获得许可。

4

2 回答 2

9

您可以使用现有的开源解决方案之一来生成和验证许可证文件:

这两个工具都允许您将其他数据存储到许可证文件中 -> 在您的情况下是允许的域名。

使用 Portable.Licensing 解决方案,您可以使用产品功能或其他许可证数据来添加允许的域名:

var license = License.New()  
    //... other options
    .WithProductFeatures(new Dictionary<string, string>  
                              {  
                                  {"example.com", "yes"},  
                                  {"domain.tld", "yes"}
                              })  
    // ... other options
    .CreateAndSignWithPrivateKey(privateKey, passPhrase);

要验证域:

if (license.ProductFeatures.Contains("domain.tld"))
    // ...

免责声明:我是Portable.Licensing开源项目的作者

于 2013-02-19T18:03:50.583 回答
0

我无法根据现有框架为您提供答案。这是我的解决方案

  1. 基本理念:使用电子邮件中的签名。签名数据是授权的 URL。
  2. 使用常规的非对称密码术创建一个公钥/私钥对(有足够的教程可用)。
  3. 将公钥嵌入到已编译的 DLL 中。
  4. 呈现控件时,加载许可证文件,使用嵌入的公钥验证其签名,根据许可证文件中提供的 URL(受签名保护)验证当前访问 URL。
  5. 成功时:让它流动
  6. 失败时:将您的消息添加到输出。
  7. (为了性能:将授权令牌缓存在应用程序数据内存中)
  8. (为了保护机制:在程序集上应用代码混淆器)

另外,您需要一个工具来使用私钥创建许可证(它不是分布式程序集的一部分,而只是这个工具。

更新:我看到你最关心的是许可证密钥的创建:

  1. 创建 Windows 窗体应用程序
  2. 创建一个允许多行的文本框
  3. 每行可以接受一个 URL。
  4. 将所有行作为文本,使用 StreamWriter(基于基于 FileStream 的 CryptoStream)。
  5. CryptoStream 使用之前创建的私钥。
  6. FileStream 对您要分发的许可证文件开放。

希望有帮助!

于 2011-10-23T22:02:14.460 回答