I really need a more complete concept of how to manage Product Registration in an online environment. Firstly I will explain what I am trying to achieve and then what I have so implemented so far. Please do not confuse this post with generating license keys, that is already taken care of.
In my application, written in VB.Net (WinForms), I want to create a "Site License" registration scheme. This means that the client only needs to register one installation (server) and all clients (workstations) will verify if the product is registered each time they log into the system. I use MySQL on both the client side and the Web (online) side. The Web DB is only used to store product (client) registration information.
The Registration Process:
1. Registration can only be done on the computer system running "mysqld.exe".
2. Basic information about the user is captured e.g.: Business Name, Business Type, City, State, Country, Contact Person, Contact Email Address, Product installation type (DEMO / Registered which will determine the Expiry Date in the license key).
3. A license key gets generated using:
(i) a unique key (AES 512 encryption) +
(ii) MAC Address (any other hardware key can be used since MAC address can be manipulated) +
(iii)Product Version +
(iv) Expiry Date.
4. Only client information is written to the Local DB while everything gets written to the Web DB, including the License Key, MAC Address, Expiry Date. This is because I do not decrypt the key online, that is done in the application.
From this, one will notice that Hardware Locking is done by incorporating the NIC MAC Address into the license key.
This is all easy and working perfectly. However this is not the problem areas.
Possible scenarios which will affect the license key:
1) Hardware failure, NIC / System replacement - MAC Address is different
2) Software re-installation for whatever reason.
I've even started to implement a random generated Pin Code which will be written to the Web DB and then used to allow any changes to be made to the information stored on the Web DB. This is just adding more complexity to the process, more things to remember, more code that can go wrong. I want to keep things as simple as possible, handle most (if not all) possible scenarios and most importantly it must be effective.
I just need someone to help me with the workflow, not the coding. Coding is not the problem here, my concept / logic is failing me and I am afraid that I am starting to complicate things more than what it is necessary. There is probably a much simpler and more effective way to do this without using third party services.
One can argue that I should maybe consider using a Paid For solution which will handle everything I need to, but this is going to lead to a debate, possible arguments, polling and eventually causing the thread to be closed. In short, I do not want nor do I need to use a Licensing system. My application will not have a huge install base because it is specialized software, however I still want to protect my investment of time, blood, sweat and tears.
Any help will by greatly appreciated. If more clarity is required, let me know and I will edit the post.
Regards,
Tino