Я создаю коммерческое настольное приложение на C#, и мне нужно реализовать проверку лицензии, которая предотвращает совместное использование ключей между пользователями.
Чего я пытаюсь достичь:
Привязать каждый лицензионный ключ к определенному компьютеру с помощью идентификатора оборудования (HWID).
Проверить лицензии на стороне сервера, чтобы проверку нельзя было исправить на стороне клиента.
Handle крайние случаи, такие как обновление оборудования (поток сброса HWID).
Немедленно внесите в черный список скомпрометированные ключи без нового развертывания.
Что я пробовал: Я изучал возможность создания HWID на основе комбинации идентификатора процессора, серийного номера материнской платы и MAC-адреса, хешированных вместе. Для проверки на стороне сервера я сейчас вызываю внешний REST API при запуске и кэширую результат сеанса.
Текущий код C#:
Я создаю коммерческое настольное приложение на C#, и мне нужно реализовать проверку лицензии, которая предотвращает совместное использование ключей между пользователями. Чего я пытаюсь достичь: [list] [*]Привязать каждый лицензионный ключ к определенному компьютеру с помощью идентификатора оборудования (HWID). [*]Проверить лицензии на стороне сервера, чтобы проверку нельзя было исправить на стороне клиента. [*]Handle крайние случаи, такие как обновление оборудования (поток сброса HWID). [*]Немедленно внесите в черный список скомпрометированные ключи без нового развертывания. [/list] [b]Что я пробовал:[/b] Я изучал возможность создания HWID на основе комбинации идентификатора процессора, серийного номера материнской платы и MAC-адреса, хешированных вместе. Для проверки на стороне сервера я сейчас вызываю внешний REST API при запуске и кэширую результат сеанса. Текущий код C#: [code]public async Task VerifyLicense(string licenseKey, string hwid) { var response = await _httpClient.PostAsJsonAsync("/licenses/verify", new { key = licenseKey, hwid = hwid, sessionid = _sessionId });
return response.IsSuccessStatusCode; } [/code] [b]Вопросы[/b] [list] [*]Является ли сочетание ЦП + материнской платы + MAC правильным подходом для стабильного HWID или существует более надежный метод?
[*]Как мне следует обрабатывать постепенное ухудшение, если сервер проверки временно недоступен?
[*]Какой правильный шаблон для периодического сеанса повторная проверка во время длительного сеанса приложения?