2011-10-23 52 views
0

我發現了一些建議專有解決方案的帖子,這些解決方案都是我正在尋找的。我希望有人有一個教程,他們可以傳遞..無論如何 - 這是我需要的:爲C#服務器控件生成/驗證許可證密鑰

我有一個服務器控件是爲Sitefinity構建的。它被編譯成一個DLL。當有人購買控件時,我想生成包含特定於其網站URL /主機名的密鑰的許可證文件(.txt/.lic)。許可證文件應支持多個URL /主機名 - 以防他們需要在其開發和生產站點上工作。

當有人試圖在沒有正確的許可證文件的情況下加載控件時 - 它只會吐出「未經許可」的消息。

有什麼想法?我已經看過微軟的服務器控制授權頁面 - 而且這是我的頭腦。它也由Machine授權。我想通過URL /主機名授權。

+1

究竟是什麼問題?如何生成密鑰?如何驗證它?如何確保庫不會在沒有正確密鑰的情況下運行? – svick

+0

那麼 - 如果你有一個教程或一些文件上述所有 - 然後我會接受。一旦我有了一個出發點,我就很擅長跑步。我想我最關心的是創建許可證文件。 – Avisra

回答

0

我無法爲您提供基於現有框架的答案。這裏我的解決方案

  1. 基本思想:使用電子郵件中的簽名。簽名數據是授權的URL。
  2. 使用常規非對稱密碼創建公鑰/私鑰對(有足夠的教程可用)。
  3. 將公鑰嵌入編譯後的DLL中。
  4. 呈現控件時,加載許可證文件,使用嵌入式公鑰驗證其簽名,根據在許可證文件中找到的提供的URL(受簽名保護)驗證當前訪問的URL。
  5. 成功:讓它流動
  6. 失敗:將您的消息添加到輸出。
  7. (出於性能:緩存應用程序數據存儲授權令牌)
  8. (對於mechansim的保護:在裝配應用代碼混淆)

其他你需要一個工具,用於創建許可證私有密鑰(這是不是分佈式組件的一部分,但只是這個工具

更新:當我看到你最關心的是許可密鑰的生成:

  1. 創建一個Windows窗體應用程序
  2. 創建一個文本框,它允許多個行
  3. 每行可以有一個網址接受。
  4. 使用StreamWriter(基於基於FileStream的CryptoStream)將所有行作爲文本。
  5. CryptoStream使用之前創建的私鑰。
  6. FileStream對要分發的許可證文件開放。

希望有所幫助!

+0

Thomas - 感謝您的回覆。你說有「足夠的教程可用」。你能否給我提供一些代碼 - 或者一個教程? – Avisra

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開源項目的作者