生成/验证c#服务器控制的许可密钥

本文关键字:许可 密钥 控制 服务器 验证 生成 | 更新日期: 2023-09-27 18:12:23

我发现了一些建议专有解决方案的帖子,可以做我正在寻找的事情。我希望有人有一个教程,他们可以传递…无论如何-这是我需要的:

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

当有人试图在没有正确的许可文件的情况下加载控件时,它只会弹出"未授权"消息。

任何想法吗?我查看了微软关于服务器控制许可的页面——它超出了我的理解范围。它也是由Machine授权的。我想通过URL/主机名授权

生成/验证c#服务器控制的许可密钥

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

  • 犀牛许可
  • 便携。许可

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

使用便携式。许可解决方案您可以使用产品功能或其他许可数据来添加允许的域名:

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"))
    // ...

免责声明:我是便携式的作者。许可开源项目

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

  1. 基本思想:像电子邮件一样使用签名。签名的数据是授权的url。
  2. 使用常规非对称加密创建公钥/私钥对(有足够的教程可用)。
  3. 在编译后的DLL中嵌入公钥。
  4. 控件呈现时,加载许可证文件,使用嵌入的公钥验证其签名,根据许可证文件中提供的url(受签名保护)验证当前访问url。
  5. On Success: Let it flow
  6. On Failure: Add your message to output.
  7. (为了提高性能:在应用程序数据内存中缓存授权令牌)
  8. (为了保护机制:在程序集上应用代码混淆器)

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

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

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

希望有帮助!