SF

Licensing · ASP.NET Core · Sécurité

Protéger un logiciel de bureau : empreinte matérielle et heartbeat

Comment lier une licence à une machine, la vérifier en continu, et couper l'accès dès qu'elle cesse d'être valide.

Un plugin métier vendu à quelques dizaines de bureaux d'études pose un problème que les applications web ignorent : il tourne sur la machine du client, hors de portée du serveur. Rien n'empêche techniquement de le copier sur dix postes.

La réponse retenue lie la licence à la machine plutôt qu'à l'utilisateur. Au premier lancement, le plugin construit une empreinte à partir d'éléments matériels et système — adresse MAC, informations Windows, coordonnées d'installation — et la transmet à une API REST de vérification. Le serveur associe cette empreinte à une licence et répond par un verdict.

Une vérification unique au démarrage ne suffit pas : elle laisse une licence révoquée fonctionner jusqu'au prochain redémarrage, c'est-à-dire potentiellement des semaines. Un mécanisme de heartbeat appelle donc la plateforme à intervalle régulier. Si la licence a été révoquée, a expiré, ou si l'empreinte ne correspond plus, l'accès est coupé dans la session en cours.

Côté administration, une interface en ASP.NET Razor Pages permet de créer, révoquer et suivre les licences. C'est volontairement simple : l'outil sert une équipe interne, pas un catalogue en ligne, et une interface sur-conçue aurait coûté du temps sans rien apporter.

Un avertissement honnête pour finir : aucune protection côté client n'est inviolable. Un plugin .NET peut être décompilé, et l'empreinte matérielle peut être falsifiée par quelqu'un de motivé. L'objectif réaliste n'est pas de rendre la copie impossible — c'est de la rendre plus coûteuse que l'achat, et de donner à l'éditeur un moyen de révoquer une licence.

.NET 8 · ASP.NET Core Web API · Razor Pages · Dapper · SQL Server

Étude de cas liée

Isolation multi-tenant : isoler sans ralentir l'API

À lire ensuite

Traverser cinq versions de .NET sans réécrire l'applicationSavoir quel client a déclenché quelle erreur