2012-01-21 2 views
0

J'ai créé un contrôle dans C# que les utilisateurs peuvent télécharger et utiliser sur leurs sites Web. Je vais charger pour ce contrôle, et je veux la possibilité de créer une clé de licence qui ne fonctionne que pour des domaines spécifiques (le domaine sur lequel le contrôle est utilisé). J'ai regardé Rhino Licensing par ayende - mais il manquait des informations sur la façon de l'inclure dans mon propre projet.Licence de domaine C# basée sur un domaine

Je suis à la recherche de l'un des suivants - un tutoriel détaillé pour la gestion des licences basées sur le domaine en C# ou des suggestions sur des solutions libres spécifiques.

+1

vous pouvez obtenir une liste des domaines acceptés et vérifier si le domaine est accepté ou non! –

+0

Je cherche quelque chose d'un peu plus détaillé. – Avisra

+0

Pouvez-vous trouver sur quel domaine le contrôle s'exécute, ou avez-vous besoin de cela dans le cadre de la réponse? –

Répondre

2

Si vous pouvez trouver le domaine pour lequel le contrôle s'exécute pour l'instant, alors je ferais cela en utilisant un fichier de licence cryptographiquement signé.

En gros, sur votre fin, vous:

  1. Générer un fichier de licence, qui contient la date à laquelle la licence a été créée, le cas échéant la date d'expiration du permis, et le domaine (s) que la licence est valable pour
  2. Crypter, ou tout au moins signe, le fichier cryptographiquement, en utilisant un système d'infrastructure à clé publique, comme RSA (construit en .NET)
  3. soumettre ce fichier de licence crypté/signé à la personne (s) la mise en place de leur domaine à l'aide votre contrôle

De leur côté, ils:

  1. Déposez le fichier de licence dans un endroit convenu, par exemple, le App_Data ou le type de dossier
  2. similaires Si nécessaire, modifiez le fichier web.config pour pointer vers cette fichier de licence, si l'emplacement ne fonctionnait automatiquement

Dans le code, vous devez:

  1. Regroupez la clé publique qui va de pair avec le pri Décrypter et vérifier la signature, cela garantit que le fichier de licence n'est pas falsifié, et qu'il provient de votre contrôle
  2. directement de vous
  3. Vérifiez que le domaine du contrôle est en cours d'exécution sous est répertorié dans le fichier de licence
  4. Prenez action si elle ne
+0

Lassee - Cela sonne bien. Je suis très nouveau en matière de cryptographie, de clés privées/publiques et de génération de licences. Connaissez-vous des didacticiels de code pour cela? Une bibliothèque de code peut-être? – Avisra

+0

Pour la "bibliothèque de code", tout est intégré dans .NET. En ce qui concerne un tutoriel, je ne connais pas de tutoriel spécifique pour cela, mais je peux presque garantir qu'il y en a, je n'en sais rien. –

0

Votre contrôle doit être en mesure d'accéder à la propriété Request.Url pour déterminer le domaine que le la demande en cours est en cours d'exécution pour, en particulier, la propriété Request.Url.Host. Une fois que vous avez compris que c'est à vous de décider comment déterminer si le nom de domaine actuel est "sous licence" ou non.

Vous avez deux options:

  • Une certaine forme de clé de licence que vous générez, peut-être un hachage qui correspond au hachage du nom de domaine.
  • Appel d'un service Web (que vous hébergez) pour déterminer si le domaine est sous licence pour votre contrôle (loin d'être idéal car cela pourrait être bloqué par le serveur Web de votre client)
  • Fournir un ensemble sur mesure à chaque client qui a le domaine autorisé codé en dur à l'intérieur.

Une chose à noter est, pensez à désactiver les contrôles de licence que vous faites lorsque la propriété est Request.IsLocaltrue de sorte que le test local ne provoque pas de contrôles de licence. Vous pouvez également envisager d'ajouter des exclusions spécifiques pour les plages IP privées (par exemple 10.xxx) afin que les serveurs de build, les serveurs de test, etc., ne nécessitent pas de licence (sauf si votre contrôle est susceptible d'être utilisé sur intranets, etc.).

Questions connexes