2015-04-23 28 views
-1

我已經爲一個商業程序創建了一個Addin,我想根據每年的訂閱向客戶銷售。我一直在努力思考如何以安全的方式驗證我的插件的最佳方式。身份驗證和授權我的加載項程序

要求

  • 易於設置一個客戶端一個新的許可證,沒有代碼改變
  • 遠程更新許可
  • 客戶不會黑客,但不應該是很容易破解

環境

  • 業務程序在服務器上運行,所有用戶都有一次點擊c#客戶端。插件位於客戶端。
  • 我可以從客戶端讀取類似網站的名稱,這是每個實例是唯一的,而不是由用戶編輯的,也是日(所以沒有令人擔憂的客戶會改變他們的日期設置)
  • 我可以用我自己的溝通全局變量服務器,在那裏我可以存儲許可證結束日期

參與討論

  • 如果我用我的服務器每天進行身份驗證,這是不可達,或者阻止IP ...
  • 當我從客戶端向我的服務器請求enddate時,這可能會改變,但如何在兩個系統之間進行有效加密,而無需整個私鑰/公鑰設置?

我知道這是一個廣泛的問題,但我也需要在這方面涉及的不同方面的廣泛答案。有人可以引導我什麼是一個好的設置,或指引我描述這一點?人們會認爲這很典型..我找不到任何東西。

+0

每次程序針對授權服務器運行時進行身份驗證。存儲它在本地過期的日期。如果X次嘗試失敗或者您檢測到他們操縱了系統時間,請鎖定該軟件。存儲加密的數據,因此不容易修改。這很可能會因爲範圍過寬而關閉,或者不幸地要求對工具或庫提出意見。 –

+0

商業軟件在服務器上運行,還是基於客戶端?客戶可能(但不能保證)能夠訪問互聯網,而服務器很可能不會。如果這是一個問題,我會建議支持至少離線激活,但離線和在線更好。 – kettch

+0

商業軟件在服務器上運行,但客戶端都具有clickonce客戶端應用程序。這是在這個clickonce應用程序,我的插件駐留 – Bastiaan

回答

2

多次嘗試/脫機工作的問題可以通過例如發出一個在有限時間(比如1周)內有效的加載項請求的令牌(「臨時」密鑰)來解決。因此,用戶可以在「離線」工作時獲得1周的「寬限期」。如果在這段時間內插件將無法連接到互聯網以獲得新的令牌,那麼它會阻止自身,直到它獲得新的令牌。示例 - 「寬限期」爲1個月的office 365。

I.e.在可能的情況下,插件會向許可證服務器發送包含某個唯一用戶標識的請求(例如,您提及的應用程序url或任何唯一標識您的客戶端的標識),服務器會搜索您的許可證數據庫併發回一個包含許可證結束日期並需要令牌刷新日期(當前服務器日期+ 1周)

要加密,我認爲你應該去「私人/公共密鑰設置」..你爲什麼要避免這個 - 它似乎是非常有意義的,並且在.NET中並不難實現。即使用私鑰/公鑰,您至少可以確保沒有人能夠「模擬」您的服務器,只要您將私鑰保留在許可證服務器上即可。

此外,請注意,可能沒有人會破解加密通信,當它更容易破解插件本身(這是一個.NET代碼,是否正確?)。我認爲這個問題可能無法解決,它可能是最大的問題。即惡意用戶可以刪除插件代碼中的許可證檢查,就是這樣。但無論如何,這假定用戶至少有一些破解程序代碼的經驗。

再一個考慮 - 如果你不打算自己出售插件(如處理客戶訂單,信用卡,做欺詐檢查等等),你最好選擇一些「電子商務」合作伙伴公司專門從事在線銷售軟件,如paypro,avangate,bluesnap,2checkout等。它可能已經有許多預先定義的(固定)許可機制/選項供您選擇。

+0

感謝Nikoly的詳盡答案!我喜歡1個月的寬限期,這也解決了演示的問題。我可以在沒有許可的情況下發送插件。我將深入私鑰/公鑰,服務器運行Apache,這將是這裏的訣竅。 – Bastiaan