基于域的C#授权

本文关键字:授权 于域 | 更新日期: 2023-09-27 18:21:14

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

我看过ayende的Rhino Licensing,但它缺乏任何关于如何将其纳入我自己的项目的信息。

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

基于域的C#授权

如果您能找到控件当前运行的域,那么我的方法是使用加密签名的许可证文件。

基本上,在你这边,你:

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

最终,他们会:

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

在代码中,您会:

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

您的控件应该能够访问Request.Url属性,以确定执行当前请求的域,特别是Request.Url.Host属性。一旦你知道了,就由你来决定当前域名是否"授权"。

你有几个选择:

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

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