Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
生成/验证C#服务器控件的许可证密钥_C#_.net_Licensing_Sitefinity - Fatal编程技术网

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

生成/验证C#服务器控件的许可证密钥,c#,.net,licensing,sitefinity,C#,.net,Licensing,Sitefinity,我发现有几篇帖子建议使用专有的解决方案来满足我的需求。我希望有人有一个他们可以传递的教程。。无论如何,我需要的是: 我有一个为Sitefinity构建的服务器控件。它被编译成一个DLL。当有人购买该控件时,我希望生成一个许可证文件(.txt/.lic),其中包含一个特定于其站点URL/主机名的密钥。许可证文件应该支持多个URL/主机名,以防他们需要它在开发和生产站点上工作 当有人试图在没有适当许可文件的情况下加载控件时,它只会弹出一条“未授权”消息 有什么想法吗?我看了微软关于服务器控制授权的页

我发现有几篇帖子建议使用专有的解决方案来满足我的需求。我希望有人有一个他们可以传递的教程。。无论如何,我需要的是:

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

当有人试图在没有适当许可文件的情况下加载控件时,它只会弹出一条“未授权”消息


有什么想法吗?我看了微软关于服务器控制授权的页面,这让我感到非常困惑。它也由机器授权。我想通过URL/主机名获得许可。

基于现有框架,我无法向您提供答案。这是我的解决办法

  • 基本思想:像在电子邮件中一样使用签名。签名数据是授权的URL
  • 使用常规非对称加密创建公钥/私钥对(提供了足够多的教程)
  • 将公钥嵌入已编译的DLL中
  • 呈现控件时,加载许可证文件,使用嵌入的公钥验证其签名,根据许可证文件中提供的url(受签名保护)验证当前访问url
  • 论成功:顺其自然
  • 失败时:将消息添加到输出
  • (对于性能:将授权令牌缓存在应用程序数据内存中)
  • (为了保护mechansim:在组件上应用代码模糊器)
  • 另外,您需要一个工具来使用私钥创建许可证(私钥不是分布式程序集的一部分,只是这个工具)

    更新:据我所知,您最担心的是许可证密钥的创建:

  • 创建Windows窗体应用程序
  • 创建允许多行的文本框
  • 每行可以接受一个URL
  • 使用StreamWriter(基于基于FileStream的CryptoStream)将所有行作为文本
  • 加密流使用以前创建的私钥
  • FileStream对要分发的许可证文件打开

  • 希望有帮助!

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

    这两种工具都允许您将附加数据存储到许可证文件->在您的情况下,存储允许的域名

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