Skip to Content
Neue Version 12 verfügbar 🎉
LicensingLizenzvorlagenLizenzeinschränkungen

Lizenzeinschränkungen

Im Abschnitt mit den Einschränkungen einer Vorlage von Babel Licensing legen Sie fest, unter welchen Bedingungen Lizenzen verwendet werden dürfen. Diese Einschränkungen steuern das Verhalten der Lizenz im Einzelnen. Damit setzen Sie verschiedene Lizenzmodelle um und erzwingen Nutzungsbedingungen. Babel Licensing bietet mehrere integrierte Einschränkungstypen und erlaubt außerdem benutzerdefinierte Einschränkungen.

Übersicht über die Lizenzeinschränkungen

Lizenzeinschränkungen sind durchsetzbare Bedingungen, die bestimmen, wie, wann und wo Ihre Software unter einer bestimmten Lizenz verwendet werden darf. Jeder Einschränkungstyp betrifft einen bestimmten Aspekt der Lizenzkontrolle, von der zeitlich begrenzten Nutzung bis zur Hardwarebindung. In einer Lizenzvorlage lassen sich mehrere Einschränkungen kombinieren, um anspruchsvolle Lizenzmodelle zu bilden, die auf Ihre Anforderungen zugeschnitten sind.

Hat eine Lizenz mehrere Einschränkungen, muss JEDE einzelne Einschränkung erfolgreich validiert werden, damit die Lizenz als gültig gilt. Schlägt die Validierung auch nur einer Einschränkung fehl, schlägt die gesamte Lizenzvalidierung fehl. So lassen sich sehr genaue Lizenzbedingungen festlegen, bei denen alle definierten Bedingungen gleichzeitig erfüllt sein müssen.

Beta-Einschränkung

Die Beta-Einschränkung ist für Vorabversionen gedacht. Sie versieht Lizenzen mit Angaben, die die Software als Betaversion ausweisen.

Wichtige Eigenschaften:

  • Build-Typ: Gibt den Build-Typ an (zum Beispiel „Alpha“, „Beta“, „RC“), der den Entwicklungsstand der Software anzeigt.
  • Letzte Änderungen: Ein Textfeld, in dem Sie Änderungen oder Funktionen dieser Betaversion dokumentieren können.

Anwendungsfälle:

  • Vorabversionen an Tester oder ausgewählte Kunden verteilen
  • Zeitlich begrenzte Betaprogramme vor der Veröffentlichung des Produkts
  • Haftung begrenzen, indem die Software eindeutig als Vorabversion gekennzeichnet wird

Implementierungsbeispiel:

if (license.Restrictions.OfType<BetaRestriction>().Any()) { // Show beta warning dialog // Enable telemetry and crash reporting }

Hardware-Einschränkung

Die Hardware-Einschränkung bindet eine Lizenz an bestimmte Hardware und verhindert so die unbefugte Nutzung auf anderen Rechnern. Dazu dient ein Hardwareschlüssel, der aus den eindeutigen Merkmalen des Zielcomputers erzeugt wird.

Wichtige Eigenschaften:

  • Hardwareschlüssel: Eine eindeutige Kennung, die aus den Hardwarekomponenten des Rechners erzeugt wird (kann in der Vorlage leer bleiben und wird dann bei der Lizenzaktivierung gefüllt).
  • Daten: Zusätzliche Daten, in denen hardwarespezifische Informationen gespeichert werden können.

Anwendungsfälle:

  • Unbefristete Lizenzen für einen einzelnen Rechner
  • Verhindern, dass eine Lizenz auf mehreren Geräten geteilt wird
  • Hochsicherheitsumgebungen, in denen Software an autorisierte Hardware gebunden sein muss

Hinweis: Bei Aktivierungslizenzen wird die Hardware-Einschränkung während der Aktivierung automatisch angewendet, weil die Lizenz über die Hardware-ID an den jeweiligen Rechner gebunden wird. Lizenzvorlagen mit der Lizenzierungsart Aktivierung brauchen deshalb keine ausdrücklich hinzugefügte Hardware-Einschränkung. Die Aktivierung selbst übernimmt die Hardwarebindung.

Testeinschränkung

Die Testeinschränkung begrenzt die Nutzung der Software nach Zeit oder nach Ausführungsparametern. Sie eignet sich damit gut für kostenlose Testversionen Ihrer Software.

Wichtige Eigenschaften:

  • Tage bis Ablauf: Anzahl der Tage, die die Testversion nach der ersten Verwendung gültig ist.
  • Laufende Instanzen: Höchstzahl der gleichzeitig erlaubten Instanzen.
  • Anzahl Ausführungen: Höchstzahl der insgesamt erlaubten Ausführungen der Anwendung.
  • Laufzeit: Maximale Dauer, die die Anwendung je Sitzung laufen darf.
  • Bedingungen: Besondere Bedingungen, die für die Testlizenz gelten.

Anwendungsfälle:

  • Zeitlich begrenzte Evaluierungsversionen
  • Testversionen mit eingeschränktem Funktionsumfang
  • Demoversionen mit begrenzter Anzahl von Ausführungen
  • Umsetzung eines Freemium-Modells

Implementierungsbeispiel:

var trial = license.Restrictions.OfType<TrialRestriction>().FirstOrDefault(); if (trial != null) { if (trial.IsExpired()) { // Show trial expiration message // Prompt for license purchase } else { // Show remaining trial period // Log trial usage } }

Domäneneinschränkung

Die Domäneneinschränkung begrenzt die Nutzung der Lizenz auf eine bestimmte Netzwerkdomäne. So kann die Software nur innerhalb der autorisierten Grenzen einer Organisation verwendet werden.

Wichtige Eigenschaften:

  • Domäne: Der Name der Netzwerkdomäne, in der die Lizenz gültig ist (zum Beispiel „example.com“).
  • Rolle: Optionaler Bezeichner einer Rolle innerhalb der Domäne (zum Beispiel „developer“, „admin“).

Anwendungsfälle:

  • Unternehmenslizenzen für bestimmte Organisationen
  • Die Nutzung der Software auf autorisierte Unternehmensnetzwerke beschränken
  • Unterschiedliche Lizenzbedingungen für unterschiedliche Organisationseinheiten

Nutzungseinschränkung

Die Nutzungseinschränkung legt die Umgebung fest, in der die Anwendung laufen darf. Damit steuern Sie Bereitstellungsszenarien und Ausführungskontexte.

Wichtige Eigenschaften:

  • Nutzung: Bezeichnet die erlaubte Nutzungsumgebung oder den erlaubten Kontext.
  • Darf in einer virtuellen Umgebung laufen: Bei true darf die Software in virtualisierten Umgebungen laufen.
  • Prozessliste: Eine Liste von Prozessen, die laufen müssen oder nicht laufen dürfen, damit die Lizenz gültig ist.

Anwendungsfälle:

  • Die Ausführung sicherheitskritischer Anwendungen in virtuellen Maschinen verhindern
  • Software auf bestimmte Umgebungen beschränken (Entwicklung, Staging, Produktion)
  • Bestimmte Begleitprozesse vorschreiben oder verbieten

Benutzerdefinierte Einschränkungen

Über die integrierten Einschränkungen hinaus können Sie in Babel Licensing benutzerdefinierte Einschränkungen erstellen, um besondere Lizenzierungsanforderungen Ihrer Anwendung abzudecken. Benutzerdefinierte Einschränkungen sind Erweiterungen, mit denen Sie eine eigene Validierungslogik umsetzen, die auf Ihre geschäftlichen und technischen Anforderungen zugeschnitten ist.

Benutzerdefinierte Einschränkungen implementieren

Um eine benutzerdefinierte Einschränkung zu erstellen, implementieren Sie eine Klasse, die von Restriction erbt und die Schnittstelle ILicenseSerializable implementiert. Damit bestimmen Sie vollständig über die Validierungslogik und darüber, wie die Einschränkung in der Lizenzdatei serialisiert wird.

Bestandteile einer benutzerdefinierten Einschränkung:

  1. Eigenschaft Name: Ein eindeutiger Bezeichner für Ihren Einschränkungstyp.
  2. Benutzerdefinierte Eigenschaften: Eigenschaften, die zur Funktion Ihrer Einschränkung gehören.
  3. Validierungslogik: Eigener Code, der anhand Ihrer Kriterien entscheidet, ob die Lizenz gültig ist.
  4. Serialisierungsmethoden: Methoden, die die Daten Ihrer Einschränkung im XML- oder Binärformat lesen und schreiben.

Beispiel: Einschränkung für Speicheranforderungen

Das folgende Beispiel zeigt eine benutzerdefinierte Einschränkung, die prüft, ob ein Rechner die Mindestanforderungen an den Arbeitsspeicher erfüllt.

/// <summary> /// A license restriction that limits usage based on the physical memory (RAM) /// of the system. /// </summary> class MemoryRestriction : Restriction, ILicenseSerializable { /// <summary> /// Gets the name of the restriction. /// </summary> public override string Name => "Memory"; /// <summary> /// Gets or sets the minimum total memory required in megabytes. /// </summary> public long TotalMemory { get; set; } /// <summary> /// Initializes a new instance of the <see cref="MemoryRestriction"/> class. /// </summary> public MemoryRestriction() { } /// <summary> /// Validates that the system has at least the required amount of physical memory. /// </summary> /// <param name="context">The license context.</param> /// <param name="type">The type being validated.</param> /// <param name="instance">The instance being validated.</param> /// <returns>A <see cref="ValidationResult"/> indicating whether validation was successful.</returns> public override ValidationResult Validate(ILicenseContext context, Type type, object instance) { ISystemInformation sys = (ISystemInformation)context.GetService(typeof(ISystemInformation)); // Cannot run on this machine long totalMem = ToMegabytes(sys.TotalPhysicalMemory); if (totalMem < TotalMemory) return ValidationResult.Invalid; return base.Validate(context, type, instance); } /// <summary> /// Converts bytes to megabytes. /// </summary> /// <param name="bytes">The number of bytes to convert.</param> /// <returns>The equivalent value in megabytes.</returns> private static long ToMegabytes(long bytes) { return bytes / 1024 / 1024; } /// <summary> /// Reads the memory restriction data from the specified state. /// </summary> /// <param name="state">The state object, which can be either an <see cref="XmlReader"/> or a <see cref="BinaryReader"/>.</param> public void Read(object state) { if (state is XmlReader xmlReader) { xmlReader.MoveToContent(); string? totalMemory = xmlReader.GetAttribute("totalMemory"); if (totalMemory != null) TotalMemory = XmlConvert.ToInt64(totalMemory); bool isEmptyElement = xmlReader.IsEmptyElement; xmlReader.ReadStartElement(); if (!isEmptyElement) xmlReader.ReadEndElement(); } else if (state is BinaryReader binaryReader) { TotalMemory = binaryReader.ReadInt32(); } } /// <summary> /// Writes the memory restriction data to the specified state. /// </summary> /// <param name="state">The state object, which can be either an <see cref="XmlWriter"/> or a <see cref="BinaryWriter"/>.</param> public void Write(object state) { if (state is XmlWriter) { XmlWriter writer = (XmlWriter)state; if (TotalMemory != 0) writer.WriteAttributeString("totalMemory", XmlConvert.ToString(TotalMemory)); } else if (state is BinaryWriter) { BinaryWriter writer = (BinaryWriter)state; writer.Write(TotalMemory); } } }

Das vollständige Beispielprojekt finden Sie auf GitHub:

git clone https://github.com/babelfornet/custom_license_restrictions.git

Benutzerdefinierte Einschränkungen beim Erstellen von Lizenzen verwenden

Sobald Sie die Klasse Ihrer benutzerdefinierten Einschränkung definiert haben, können Sie sie beim Erzeugen von Lizenzen verwenden:

// Create a digital signer RSASignature signer = RSASignature.CreateFromKeyFile("Keys.snk"); // Requires a minimum of 4GB RAM to validate int totalMemory = 4096; var license = new XmlLicense() .WithUniqueId() .ForProduct("Product", "1.0.0.0") .LicensedTo("ACME", "devs@acme.com") .WithRestrictions(new MemoryRestriction(totalMemory)) .SignWith(signer); license.Save("Product.licenses");

Anwendungsfälle für benutzerdefinierte Einschränkungen

Benutzerdefinierte Einschränkungen decken ein breites Spektrum besonderer Lizenzierungsanforderungen ab:

  • Hardwareanforderungen: Sicherstellen, dass die Software nur auf Rechnern läuft, die die Mindestanforderungen erfüllen.
  • Netzwerkkonfiguration: Bestimmte Netzwerkkonfigurationen oder Anforderungen an die Konnektivität prüfen.
  • Zeitzoneneinschränkungen: Die Nutzung der Software anhand der Zeitzone auf bestimmte geografische Regionen begrenzen.
  • Begleitanwendungen: Prüfen, ob erforderliche Begleitanwendungen installiert sind.
  • Prüfung des Datenbankmoduls: Sicherstellen, dass kompatible Datenbanksysteme vorhanden sind.
  • Erkennung von Cloud-Umgebungen: Besondere Regeln für Bereitstellungen in der Cloud anwenden.
  • Eigene Geschäftsregeln: Branchen- oder organisationsspezifische Lizenzierungsregeln umsetzen.

Benutzerdefinierte Einschränkungen und Lizenzvorlagen

Benutzerdefinierte Einschränkungen fügen sich in das Vorlagensystem von Babel Licensing ein. So können Sie Lizenzkonfigurationen, die Ihre eigene Validierungslogik enthalten, speichern und wiederverwenden. Als Teil einer Lizenzvorlage im Babel Licensing Service gespeichert, werden diese benutzerdefinierten Einschränkungen zu wiederverwendbaren Bausteinen, die sich einheitlich auf viele Lizenzen anwenden lassen.

Benutzerdefinierte Einschränkungen in Lizenzvorlagen speichern

Eine implementierte benutzerdefinierte Einschränkung nehmen Sie über den Babel Licensing Service in eine Lizenzvorlage auf:

  1. Erstellen Sie Ihre Lizenz mit der benutzerdefinierten Einschränkung, wie im vorigen Beispiel gezeigt.
  2. Speichern Sie diese Lizenz als Vorlage in der Lizenzdatenbank von Babel Licensing.
  3. Die Vorlage steht dann samt der benutzerdefinierten Einschränkung für das Erzeugen neuer Lizenzen bereit.

Vorteile von benutzerdefinierten Einschränkungen in Vorlagen

Benutzerdefinierte Einschränkungen in Lizenzvorlagen zu speichern, hat mehrere Vorteile:

  1. Einheitlichkeit: Alle Lizenzen, die aus der Vorlage erzeugt werden, wenden dieselben benutzerdefinierten Validierungsregeln an. Ihre Lizenzierungsstrategie bleibt damit einheitlich.
  2. Zentrale Verwaltung: Sie verwalten Ihre benutzerdefinierten Einschränkungen an einer einzigen Stelle im Babel Licensing Service. Lizenzierungsregeln lassen sich so leichter aktualisieren oder ändern.
  3. Einfachere Lizenzerzeugung: Sie erzeugen neue Lizenzen mit komplexen benutzerdefinierten Einschränkungen, ohne die Validierungslogik jedes Mal neu zu implementieren.
  4. Versionierung und Nachverfolgung: Sie behalten den Überblick über die verschiedenen Versionen Ihrer benutzerdefinierten Einschränkungen, wenn sich Ihre Lizenzierungsanforderungen ändern.
  5. Integration in die Lizenzierungsabläufe: Sie nehmen benutzerdefinierte Einschränkungen in Ihre bestehenden Lizenzierungsprozesse auf, etwa Lizenzaktivierung, Floating-Lizenzen oder Dateilizenzen.

Beispielablauf

So sieht ein typischer Ablauf aus, wenn Sie benutzerdefinierte Einschränkungen im Vorlagensystem des Babel Licensing Service verwenden:

  1. Entwicklung: Erstellen und testen Sie die Klasse Ihrer benutzerdefinierten Einschränkung in Ihrer Entwicklungsumgebung.

  2. Vorlage erstellen: Erstellen Sie eine Lizenz mit Ihrer benutzerdefinierten Einschränkung und speichern Sie sie als Vorlage:

    var licenseKey = new XmlLicense() .WithUniqueId() .ForProduct("Product", "1.0.0.0") .WithRestrictions(new MemoryRestriction(4096)) .SignWith(signer) .ToReadableString(); // Store licenseKey in Babel Licensing Service
  3. Lizenzen erzeugen: Erzeugen Sie aus der Vorlage die Lizenzen für die einzelnen Kunden.

  4. Verteilung: Verteilen Sie die erzeugte Lizenz auf dem von Ihnen bevorzugten Weg an den Kunden (direkter Download, E-Mail, Aktivierungscode und so weiter).

  5. Validierung: Wenn der Kunde Ihre Anwendung verwendet, wird die Validierungslogik der benutzerdefinierten Einschränkung als Teil der Lizenzvalidierung ausgeführt.

Benutzerdefinierte Einschränkungen für Vorlagen implementieren

Damit Ihre benutzerdefinierten Einschränkungen im Vorlagensystem gut funktionieren, beachten Sie diese Leitlinien für die Implementierung:

  1. Flexible Parameter: Entwerfen Sie die Klasse Ihrer benutzerdefinierten Einschränkung so, dass sie sowohl die Initialisierung mit Parametern (für das Erstellen im Code) als auch die Initialisierung ohne Parameter (für das Erstellen aus einer Vorlage) unterstützt.
  2. XML-Serialisierung: Implementieren Sie die Schnittstelle IXmlSerializable korrekt, damit die Konfiguration Ihrer benutzerdefinierten Einschränkung in Lizenzvorlagen gespeichert und aus ihnen geladen werden kann.
  3. Abwärtskompatibilität: Wahren Sie die Abwärtskompatibilität, wenn Sie benutzerdefinierte Einschränkungen aktualisieren, damit vorhandene Vorlagen und Lizenzen weiter funktionieren.
  4. Fehlerbehandlung: Implementieren Sie eine robuste Fehlerbehandlung in der Serialisierungs- und in der Validierungslogik, um Probleme zu vermeiden, wenn Ihre benutzerdefinierte Einschränkung in einer Vorlage verwendet wird.

Integration mit den Funktionen des Babel Licensing Service

In Vorlagen gespeicherte benutzerdefinierte Einschränkungen können alle Funktionen des Babel Licensing Service nutzen:

  • Aktivierungslizenzen: Wenden Sie benutzerdefinierte Einschränkungen auf Lizenzen an, die eine Aktivierung erfordern, und ergänzen Sie die Aktivierung um Ihre eigene Validierung.
  • Floating-Lizenzen: Verwenden Sie benutzerdefinierte Einschränkungen mit Floating-Lizenzen, um die gleichzeitige Nutzung der Lizenz um eigene Validierungskriterien zu ergänzen.
  • Dateilizenzen: Nehmen Sie benutzerdefinierte Einschränkungen in Dateilizenzen auf, wenn die Validierung offline erfolgt.

Wenn Sie benutzerdefinierte Einschränkungen in Ihre Lizenzvorlagen im Babel Licensing Service aufnehmen, entsteht ein flexibles und wartbares Lizenzierungssystem. Es deckt auch sehr spezielle Lizenzierungsanforderungen ab und behält die Vorteile der zentralen Lizenzverwaltung.

Bewährte Vorgehensweisen für benutzerdefinierte Einschränkungen

  1. Validierung schnell halten: Der Validierungscode einer benutzerdefinierten Einschränkung läuft bei der Lizenzprüfung. Halten Sie ihn deshalb effizient.
  2. Ausnahmen behandeln: Sorgen Sie dafür, dass Ihr Validierungscode Ausnahmen sauber behandelt, damit die Anwendung nicht abstürzt.
  3. Klare Rückmeldung geben: Schlägt die Validierung fehl, geben Sie aussagekräftige Informationen über den Grund zurück.
  4. Sensible Logik schützen: Sensible Validierungslogik in Ihrer benutzerdefinierten Einschränkung kann Ziel von Reverse Engineering werden. Ziehen Sie für kritischen Code eine Verschleierung in Betracht.
  5. Umfassend testen: Testen Sie Ihre benutzerdefinierten Einschränkungen in verschiedenen Umgebungen, um ein einheitliches Verhalten sicherzustellen.
  6. Gründlich dokumentieren: Dokumentieren Sie Ihre benutzerdefinierten Einschränkungen für die interne Entwicklung und in den Unterlagen für Kunden.

Benutzerdefinierte Einschränkungen erweitern Babel Licensing um die Möglichkeit, besondere Lizenzierungsanforderungen abzudecken, und ergeben eine flexible Lizenzierungslösung, die auf Ihre Anforderungen zugeschnitten ist. Mit diesen eigenen Validierungsregeln setzen Sie genau das Lizenzmodell um, das Ihre Anwendung braucht, und bestimmen vollständig darüber, wie Ihre Software lizenziert und verwendet wird.

Einschränkungen kombinieren

Eine Stärke von Babel Licensing ist die Möglichkeit, mehrere Einschränkungen zu anspruchsvollen Lizenzmodellen zu kombinieren. Sie können zum Beispiel kombinieren:

  • Testversion + Hardware: Eine zeitlich begrenzte Testversion, die an einen bestimmten Rechner gebunden ist
  • Domäne + Nutzung: Eine Lizenz, die nur innerhalb einer Unternehmensdomäne und in nicht virtuellen Umgebungen gültig ist
  • Beta + Benutzerdefiniert: Eine Betalizenz mit benutzerdefinierten Einschränkungen für bestimmte Testszenarien

Werden mehrere Einschränkungen angewendet, müssen alle erfüllt sein, damit die Lizenz als gültig gilt. So steuern Sie genau, wie Ihre Software lizenziert und verwendet wird.

Bewährte Vorgehensweisen für die Verwendung von Einschränkungen

  1. Einfach beginnen: Beginnen Sie mit den unbedingt nötigen Einschränkungen und fügen Sie weitere hinzu, wenn Ihre Lizenzierungsanforderungen wachsen.
  2. An die Benutzererfahrung denken: Wägen Sie Sicherheit und Benutzerfreundlichkeit gegeneinander ab. Zu restriktive Lizenzen können rechtmäßige Benutzer verärgern.
  3. Klare Rückmeldung geben: Führt eine Einschränkung dazu, dass die Lizenzvalidierung fehlschlägt, sollte Ihre Anwendung klar mitteilen, warum die Lizenz ungültig ist.
  4. Gründlich testen: Testen Sie alle Kombinationen von Einschränkungen, um sicherzustellen, dass sie in den verschiedenen Szenarien wie erwartet funktionieren.
  5. Für Endbenutzer dokumentieren: Dokumentieren Sie klar, welche Einschränkungen für jeden Lizenztyp gelten, damit die Kunden die Grenzen kennen.
  6. Eingeschränkten Betrieb vorsehen: Erwägen Sie, wo es möglich ist, einen eingeschränkten Funktionsumfang zuzulassen, statt die Anwendung ganz zu verweigern, wenn bestimmte Einschränkungen nicht erfüllt sind.

Richtig eingesetzt ergeben die Lizenzeinschränkungen in Ihren Vorlagen ein flexibles Lizenzierungssystem, das Ihr geistiges Eigentum schützt und den Kunden den Zugang gewährt, der ihrer Lizenzstufe entspricht. Diese Einschränkungen sind die Grundlage für anspruchsvolle Lizenzmodelle, die Sicherheit und Benutzerfreundlichkeit ausbalancieren. So wird Ihre Software gemäß Ihren Lizenzbedingungen verwendet, und rechtmäßige Benutzer können reibungslos arbeiten.

Last updated on