生成/验证C#服务器控件的许可证密钥

时间:2011-10-23 17:04:21

标签: c# .net licensing sitefinity

我发现了一些帖子,建议专有的解决方案能够满足我的需求。我希望有人有他们可以传递的教程..无论如何 - 这就是我需要的东西:

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

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

有什么想法?我查看了微软关于服务器控制许可的页面 - 这是我的想法。它也由Machine授权。我想通过URL /主机名进行许可。

2 个答案:

答案 0 :(得分:8)

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

Boths工具允许您将其他数据存储到许可文件中 - >在您的情况下允许的域名。

使用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开源项目的作者

答案 1 :(得分:0)

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

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

    更新:我认为您最关心的是创建许可证密钥:

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