【问题标题】:Domain Based C# Licensing [closed]基于域的 C# 许可 [关闭]
【发布时间】:2012-01-21 18:30:58
【问题描述】:

我在 c# 中构建了一个控件,用户可以下载并在他们的网站中使用。我将为此控件收费,并希望能够创建仅适用于特定域(使用控件的域)的许可证密钥。

我查看了 ayende 的 Rhino Licensing - 但它缺乏任何关于如何将其包含到我自己的项目中的信息。

我正在寻找以下内容之一 - 在 c# 中处理基于域的许可的详细教程或有关特定免费解决方案的建议。

【问题讨论】:

  • 您可以获取接受域列表并检查域是否被接受!
  • 我正在寻找更详细的东西。
  • 您能找出控件在哪个域上运行,还是您需要将其作为答案的一部分?

标签: c# .net licensing cryptography


【解决方案1】:

如果您能找出控件目前正在运行的域,那么我这样做的方法是使用经过加密签名的许可证文件。

基本上,就你而言,你:

  1. 生成许可证文件,其中包含许可证的创建日期、必要时许可证的到期日期以及许可证的有效域
  2. 使用 PKI 系统(如 RSA(内置于 .NET))以加密方式加密或至少签名文件
  3. 将此加密/签名的许可证文件提交给使用您的控件设置域的人员

他们会:

  1. 将许可文件放到约定的位置,例如 App_Data 或类似类型的文件夹
  2. 如有必要,将 web.config 文件更改为指向此许可证文件,如果位置没有自动确定

在代码中,你会:

  1. 将公钥与用于加密/签署许可证文件的私钥捆绑在一起,作为控件的一部分,或作为控件旁边的单独文件
  2. 解密并验证签名,这样可以确保许可证文件不被篡改,并且直接来自您
  3. 验证运行控件的域是否列在许可证文件中
  4. 如果不采取行动

【讨论】:

  • Lassee - 这听起来很棒。我对密码学、私钥/公钥和生成许可证非常陌生。你知道这样做的任何代码教程吗?也许是代码库?
  • 对于“代码库”,一切都内置在 .NET 中。至于教程,我不知道有什么具体的教程,但我几乎可以保证有一些,我只是不知道。
【解决方案2】:

您的控件应该能够访问Request.Url 属性以确定当前请求正在执行的域,特别是Request.Url.Host 属性。一旦你知道了,你如何确定当前的域名是否是“许可的”。

你有几个选择:

  • 您生成的某种形式的许可证密钥,可能是与域名哈希匹配的哈希。
  • 调用(您托管的)网络服务以确定域是否已获得许可以供您控制(远非理想,因为这可能会被您的客户网络服务器合理地阻止)
  • 为每个客户提供定制的程序集,其中包含硬编码的允许域。

值得一提的是,请考虑在 Request.IsLocal 属性为 true 时禁用您进行的任何许可检查,以便本地测试不会导致许可检查。您还可以考虑为私有 IP 范围(例如 10.x.x.x)添加特定排除项,以便构建服务器、测试服务器等......不需要许可(除非您的控制可能用于 Intranet 等...... )。

【讨论】:

    猜你喜欢
    • 2011-12-10
    • 2010-10-12
    • 1970-01-01
    • 2023-03-06
    • 2015-12-02
    • 1970-01-01
    • 2015-04-29
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多