Lizenzdatei
Lizenzdateien steuern Softwarelizenzen in getrennten oder geschützten Umgebungen, in denen die Anwendung den Babel Licensing Service möglicherweise nicht erreicht. Eine Lizenzdatei können Sie auf zwei Arten erstellen:
- offline mit dem Befehlszeilentool
lic, ganz ohne Dienst; - im Babel Licensing Service mit Babel Desktop oder der Webanwendung der Data-Center-Edition, um sie anschließend zu exportieren.
Diese Seite zeigt, wie Sie eine Lizenzdatei erstellen und wie Sie sie in Ihrer .NET-Anwendung validieren.
Voraussetzungen
Den Babel Licensing Service brauchen Sie nur, wenn Sie die Lizenzdatei im Dienst erstellen. Stellen Sie in diesem Fall sicher, dass der Babel Licensing Service auf Ihrem Server läuft, wie im Abschnitt Erste Schritte beschrieben. Erstellen Sie dann nach der Anleitung weiter unten ein Testprodukt und eine zugehörige Lizenzvorlage. Wenn Sie die Lizenzdatei offline mit lic erzeugen, können Sie diesen Schritt überspringen.
Laden Sie anschließend den Quellcode des Clients für die Lizenzdatei von GitHub herunter. Mit diesem Clientcode binden Sie Lizenzdateien in Ihre .NET-Anwendung ein. Klonen Sie das Repository mit dem folgenden Befehl:
git clone https://github.com/babelfornet/license-file-console-example.gitWenn Sie die Lizenzdatei im Babel Licensing Service erstellen, beruht sie auf einer zugehörigen Lizenzvorlage.
Eine Lizenzdatei erstellen
Beim Erzeugen einer Lizenzdatei können Sie verschiedene Angaben festlegen, etwa den Lizenznehmer, das Produkt, das Ablaufdatum, die erlaubten Funktionen und benutzerdefinierte Lizenzfelder. Die Lizenzdatei wird digital signiert, um ihre Integrität und Echtheit zu sichern.
Mit Babel Desktop
Um eine Lizenzdatei mit Babel Desktop zu erstellen, gehen Sie wie folgt vor:
Mit dem Dienst verbinden
Öffnen Sie Babel Desktop und klicken Sie in der Aktivitätsleiste auf das Symbol des Profils Ihres Babel Licensing Service. Zum Erzeugen von Lizenzen brauchen Sie ein Profil Lokaler Test mit Lokale Verwaltung. Führen Sie Babel Desktop deshalb auf dem Rechner des Dienstes aus. Für einen entfernten Dienst verwenden Sie die Webanwendung oder die Management API.
Lizenz erzeugen
Öffnen Sie die Ansicht Lizenzen und wählen Sie in der Symbolleiste Lizenz erzeugen.
Vorlage und Signaturschlüssel auswählen
Wählen Sie in der Gruppe Vorlage die Vorlage der Lizenz (siehe Lizenzvorlagen) und den Signaturschlüssel aus. Ist kein Signaturschlüssel ausgewählt, wird der Schlüssel der Vorlage oder ihres Produkts verwendet.
Modus auf Datei setzen
Setzen Sie in der Gruppe Bedingungen den Modus auf Datei. Für eine Dateilizenz ist kein Benutzerschlüssel nötig.
Lizenznehmer und Lizenzdetails eingeben
Geben Sie die Angaben zum Lizenznehmer ein (der Name des Lizenznehmers oder ein Unternehmen ist erforderlich), das Ausstellungs- und das Ablaufdatum sowie die benötigten Felder und Funktionen.
Lizenz speichern
Speichern Sie das Formular. Der Dienst erzeugt und signiert die Lizenz, die dann in der Lizenzliste erscheint.
Lizenzdatei exportieren
Wählen Sie die Lizenz aus und klicken Sie in der Symbolleiste auf Lizenzschlüssel exportieren…. Die Datei wird in dem Exportordner für Lizenzen gespeichert, der in den Einstellungen der Lizenzverwaltung festgelegt ist, und nach der Lizenz-ID benannt. Benennen Sie sie für dieses Beispiel in ClientFile.licenses oder ClientFile.lic um.
Mit der Data-Center-Edition können Sie die Lizenz auch auf der Seite „Licenses“ (Lizenzen) der Webanwendung erzeugen und herunterladen.
Mit der Befehlszeile lic
Um die Lizenzdatei offline zu erstellen, ohne den Babel Licensing Service, verwenden Sie das Befehlszeilentool lic. Signieren Sie die Lizenz mit demselben Schlüssel, mit dem die Anwendung sie validiert. In diesem Beispiel ist das die Datei Keys.snk:
lic ClientFile.dll --keyfile Keys.snk --sign --licensee name="Contoso" --expiredate 365 --feature Pro=1 --output ClientFile.licensesAlle Optionen sind in der Referenz beschrieben.
Sie können die Lizenzdatei nun an Ihre Kunden verteilen oder damit die Lizenz in getrennten oder geschützten Umgebungen bereitstellen, in denen der Babel Licensing Service nicht erreichbar ist.
Einen Client konfigurieren
Um Lizenzen anhand einer Lizenzdatei zu validieren, binden Sie die Bibliothek von Babel Licensing in Ihre .NET-Anwendung ein. Die Bibliothek stellt APIs und Methoden bereit, die die Lizenzvalidierung erleichtern. Wenn Sie die Bibliothek von Babel Licensing referenzieren und den nötigen Code aufnehmen, validiert Ihre Anwendung die Lizenzdatei korrekt.
Um das Konsolen-Beispielprojekt zur Lizenzdatei zu öffnen, gehen Sie wie folgt vor:
Beispielprojekt aufrufen
Wechseln Sie zu dem Ort, an dem das Beispielprojekt zur Lizenzdatei gespeichert ist.
Lizenzdatei kopieren
Kopieren Sie die Lizenzdatei ClientFile.licenses in den Projektordner.
Projektmappe öffnen
Doppelklicken Sie auf die Projektmappendatei ClientFile.sln, um sie in der integrierten Entwicklungsumgebung (IDE) Ihrer Wahl zu öffnen, etwa in Visual Studio.
Referenz auf die Clientbibliothek prüfen
Prüfen Sie nach dem Öffnen des Projekts, ob die Clientbibliothek von Babel Licensing korrekt referenziert wird. Fehlt die Referenz, richten Sie ein lokales NuGet-Repository ein, wie im Absatz Client-Komponenten beschrieben.
Projektmappe erstellen
Wenn die Referenzen stimmen, erstellen Sie die Projektmappe über die Option „Build“ oder „Rebuild“ im Menü der IDE.
Anwendung ausführen
Nachdem die Projektmappe erfolgreich erstellt wurde, können Sie die Anwendung in der Debugkonfiguration ausführen. Klicken Sie dazu auf die Schaltfläche „Start Debugging“ oder verwenden Sie die Tastenkombination Ihrer IDE (zum Beispiel F5 in Visual Studio). Die Konsolen-Beispielanwendung zur Lizenzdatei startet, validiert die Lizenzdatei und zeigt die Angaben zum Lizenznehmer an.

Beispiel für die Validierung einer Lizenzdatei
Es folgt der Quellcode der Clientanwendung:
using System;
using Babel.Licensing;
class Program
{
/// <summary>
/// Public key used to validate the license signature.
/// </summary>
static string PublicKey => "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDE1VRiIdr6fiVZKve7NVgjIvGdRiRx0Mjjm+Yzf6tLbzFnxLs0fat5EoRcubxx0QQQDfydsJBE/fc7cwRWSrE2xK6X4Eb4W8O47pCMjqvTQZfDqQywEZJrLlxpp9hlKz6FDYX4SagrjmP1gdw8olo+n+IBz8ubkNxRhvycikxuDQIDAQAB";
static Program()
{
// Register the file license provider for the Program class
// that will be used by the BabelLicenseManager to locate the license file.
// The license file should be named as the assembly name with .licenses extension.
BabelFileLicenseProvider provider = new BabelFileLicenseProvider();
// Sets the public key used to validate the license signature
provider.SignatureProvider = RSASignature.FromKeys(PublicKey);
// Uncomment the following line to customize the license file path
// provider.LicenseFilePath = "license.xml";
// Register the provider for the Program class
BabelLicenseManager.RegisterLicenseProvider(typeof(Program), provider);
}
static void Main(string[] args)
{
var program = new Program();
try
{
var license = program.ValidateLicense();
Console.WriteLine($"License {license.Id} registered to {license.Licensee?.Company}");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
public ILicense ValidateLicense()
{
// Uses the registered file license provider for Program class
return BabelLicenseManager.Validate(typeof(Program), this);
}
}Im statischen Konstruktor der Klasse Program wird der Anbieter für Dateilizenzen über den BabelFileLicenseProvider registriert. Dieser Anbieter sucht und validiert die Lizenzdatei für die Klasse Program. Standardmäßig trägt die Lizenzdatei denselben Namen wie die Assembly, mit der Erweiterung .licenses oder .lic.
Den öffentlichen Schlüssel extrahieren und schützen
Im gezeigten Code enthält die Eigenschaft PublicKey den öffentlichen Schlüssel, der für die Validierung der Lizenzsignatur nötig ist. Ihr Wert wurde aus der Datei Keys.snk extrahiert.
var rsa = RSASignature.CreateFromKeyFile("Keys.snk");
string publicKey = rsa.ExportKeys(true);Um den öffentlichen Schlüssel aus der Datei Keys.snk zu extrahieren, ruft der Code die Methode RSASignature.CreateFromKeyFile mit dem Dateinamen als Parameter auf. Diese Methode erstellt ein RSASignature-Objekt, das das in der Datei Keys.snk gespeicherte Schlüsselpaar darstellt. Anschließend wird auf dem RSASignature-Objekt die Methode ExportKeys mit dem Parameter true aufgerufen, um den öffentlichen Schlüssel zu exportieren. Diese Methode gibt den öffentlichen Schlüssel als Zeichenfolge zurück.
Die Datei Keys.snk enthält den privaten Schlüssel und darf nicht mit der Anwendung ausgeliefert werden. Der private Schlüssel muss sicher aufbewahrt und vor unbefugtem Zugriff geschützt werden.
Verwenden Sie Lizenzdateien, wenn die Anwendung nur eingeschränkt oder gar nicht mit dem Babel Licensing Service verbunden ist. Sie erzeugen sie mit Babel Desktop oder der Befehlszeile lic, und sie lassen sich leicht bereitstellen und zwischen Systemen übertragen. Mit der signierten Datei behalten Sie die Lizenzbedingungen auch offline unter Kontrolle, und Ihre .NET-Anwendung validiert sie, ohne den Dienst zu kontaktieren.
Lizenzvalidierung mit einem Lizenzmanager
Neben dem BabelFileLicenseProvider bietet Babel Licensing weitere Wege der Lizenzvalidierung über eigene Lizenzmanager-Klassen. Diese Klassen, etwa XmlLicenseManager und StringLicenseManager, laden und validieren Lizenzschlüssel flexibel, ohne dass der BabelFileLicenseProvider die Lizenzdatei suchen muss.
Die Klasse XmlLicenseManager ist für XML-basierte Lizenzdateien gedacht. Mit ihr legen Sie den öffentlichen Schlüssel für die Validierung der Lizenzsignatur fest. Sie stellt außerdem Methoden bereit, die den Lizenzschlüssel aus einer XML-Datei lesen, ihn validieren und das validierte Lizenzobjekt zurückgeben.
Der folgende Codeausschnitt zeigt das im Einzelnen:
public ILicense ValidateLicenseWithXmlLicenseManager()
{
// Uses the Xml license manager
XmlLicenseManager manager = new XmlLicenseManager();
// Sets the public key used to validate the license signature
manager.SignatureProvider = RSASignature.FromKeys(PublicKey);
// Reads the license from the license file
string licenseKey = File.ReadAllText("ClientFile.lic");
// Validates the license
return manager.Validate(licenseKey, typeof(Program), this);
}Die Klasse StringLicenseManager ist eine weitere Möglichkeit. Sie validiert Lizenzschlüssel direkt aus einer codierten Zeichenfolge. Das ist nützlich, wenn die Lizenzinformationen aus einer anderen Quelle stammen, etwa aus einer Datenbank oder einer API-Antwort.
Die Klassen XmlLicenseManager und StringLicenseManager bieten beide alternative Wege der Lizenzvalidierung und lassen Ihnen die Kontrolle über das Laden und Validieren. Sie können eine eigene Logik für den Zugriff auf den Lizenzschlüssel festlegen und die Echtheit und Integrität der Lizenz mit dem angegebenen öffentlichen Schlüssel prüfen.